侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

ThinkPHP框架下整合支付宝支付功能图文教程

ThinkPHP  /  管理员 发布于 8年前   224

本文实例讲述了ThinkPHP框架下整合支付宝支付功能。分享给大家供大家参考,具体如下:

背景

  • 近期项目需要接入支付宝支付功能,其中开发使用了ThinkPHP3.2.3框架,通过参考开发平台文档可以知道,网站开发有两种场景,一种是手机网站支付,直接唤醒支付宝app进入支付操作;另一种多是 PC 端显示支付二维码的形式,然后使用手机的支付宝app扫描。
  • 此处主要介绍手机网站支付的实现,后期补充扫码支付。

一.接入配置

1).接入步骤

根据“快速接入”中的流程,两者大同小异,都是进行:

  • 第一步:创建应用并获取APPID
  • 第二步:配置密钥
  • 第三步:搭建和配置开发环境
  • 第四步:调用接口

2).配置截图

3).提示说明

虽然官方文档已经做的很详细、成熟,不过还是有几点需要着重提醒一下,以免不必要的纠结。

  • 应用创建成功后需要大概一到三天的审核
  • 配置密钥时建议下载其提供的加密工具,可参考RSA密钥生成方法
  • 此处我所下载的是开发平台服务端SDK中的PHP版资源,而非DEMO文件,相信两者还是有所区别的

二.手机网站支付接口实现

1).测试入口页面

如下图所示,我在此创建了一个简单的入口文件,根据开发文档中的介绍是需要统一编码格式的,此处我选择的是UTF-8

2).html代码参考

需要注意的是,接口指明需要POST方式进行提交请求

3).支付宝配置信息

对于支付宝的配置信息,我写在 Application/Common/Conf/config.php中

//支付宝 支付配置  'ALI_CONFIG' => array(    'gatewayUrl'      => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)'    'appId'         => '2017xxxxxxxx9',//APPID即创建应用后生成    //由开发者自己生成: 请填写开发者私钥去头去尾去回车,一行字符串    'rsaPrivateKey'     => 'MIIExxxxxxxxxxxxxxxxxxxxxxxxxxxq',    //支付宝公钥,由支付宝生成: 请填写支付宝公钥,一行字符串    'alipayrsaPublicKey'  => 'IIBxxxxxxxxxxxxxxxxxxxEFAA',    'notifyUrl'       => 'http://www.xxx.com/m/cartpay/notify_ali', // 支付成功通知地址    'returnUrl'       => 'http://www.xxx.com', // 支付后跳转地址    'returnPcUrl'      => 'http://www.xxx.com/Home', // PC端扫码支付后跳转地址  ),

4).服务端SDK导入

将前面所下载的SDK放入自定义的位置,在此,我习惯放在如下的路径中,…\ThinkPHP\Library\Vendor\Alipay,特别提醒一点,对于各文件类的引用会依据代码框架而不同,需要自行确认。

5).支付接口实现

在请求唤醒支付宝支付的路径中进行接口代码的编辑

提示

  • 通过实验发现,如果在电脑端进行此功能的支付测试,会报出如下的类似错误,个人认为源于手机和PC的内置配置不同
  • 对于手机网站支付需要在手机上测试,可自行配置虚拟域名手机访问即可,不要在此问题上花费不必要的时间
  • 因为本人就是在电脑有报错,手机端访问却能完美实现,从而走了验证签名的过程到最后却并非错在签名,当然也不排除你的操作过程签名一定是没问题的哦.


代码实现如下:
  /**   * 支付宝支付post提交页面   */  public function alipay(){    if (IS_POST){      Vendor('Alipay.aop.AopClient');      Vendor('Alipay.aop.request.AlipayTradeWapPayRequest');      //$out_trade_no = I('post.order_sn');      /*       * $out_trade_no 为自己业务逻辑中要支付的订单号       *   可从POST数据中提取,具体安全起见可自行加密操作 此处仅举例测试数据       * $order_amount 为要进行支付的金额 注意要用小数转换       *   例如:3.50,10.00       * $aliConfig 获取支付宝配置数据       */      $out_trade_no = '2017M'.time();      $body = '欢迎购买商品,愿您购物愉快';      $subject = '你好';      $order_amount = 9.00;      $aliConfig = C('ALI_CONFIG');      $aop = new \AopClient();      $aop->gatewayUrl = $aliConfig['gatewayUrl'];      $aop->appId = $aliConfig['appId'];      $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];      $aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];      $aop->apiVersion = '1.0';      $aop->postCharset='UTF-8';      $aop->format='json';      $aop->signType='RSA2';      $request = new \AlipayTradeWapPayRequest ();      $bizContent = "{" .        "  \"body\":\"$body.\"," .        "  \"subject\":\"$subject\"," .        "  \"out_trade_no\":\"$out_trade_no\"," .        "  \"timeout_express\":\"90m\"," .        "  \"total_amount\":$order_amount," .        "  \"product_code\":\"QUICK_WAP_WAY\"" .        " }";      $request->setBizContent($bizContent);      $request->setNotifyUrl($aliConfig['notifyUrl']);      $request->setReturnUrl($aliConfig['returnUrl']);      $result = $aop->pageExecute ( $request);      echo $result;    }else{      echo 'sorry,非法请求失败';    }  }

6).支付成功后的通知处理

此时,通过获取所提交过来的post数据,进行订单号的剥离,从而进行下一步的业务逻辑处理即可.
[注意]:

  • 接口文档中有点明,支付通知功能最后需要输出‘success'
  • 此处的通知路径要与配置中确定的 ‘notifyUrl'完全一致
 /**  * 支付宝支付通知功能  */  public function notify_ali(){    $out_trade_no = I('post.out_trade_no');    $this->toUpdatePayInfo($out_trade_no,'ali');    echo 'success';  }

三.电脑网站支付接口实现

对比来看,其实 PC 端的代码设计与手机端大同小异,在此点明一下使用情景,可进行参考。

1).支付接口实现

提示:

  • 测试发现,接口中定义“subject”时,对于文字的数目有要求,不能超过四个字,至于字母似乎没有特别限制,开发过程中原想显示全部的商品名称却无法实现,还请注意。

  • 提供的代码暂时未进行界面的设计,可参考 手机端接口思想,接收并处理订单信息后再唤醒支付宝,当前的代码可以在公共文件配置正确的情况下,直接公网访问接口链接即可展示效果。

  • 支付成功后的通知处理,请参考手机端实现方式.

2).实现效果截图

3).代码实现如下:

 /**   * 电脑端唤醒 支付宝扫码支付接口   */  public function aliPayPage(){    $out_trade_no = '2017PC'.time();    $order_amount = '12.88';    $proName = "真米黑米 XXXXXX";    Vendor('Alipay.aop.AopClient');    Vendor('Alipay.aop.request.AlipayTradePagePayRequest');    //构造参数    $aop = new \AopClient();    $aliConfig = C('ALI_CONFIG');    $aop->gatewayUrl = $aliConfig['gatewayUrl'];    $aop->appId = $aliConfig['appId'];    $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];    $aop->apiVersion = '1.0';    $aop->signType = 'RSA2';    $aop->postCharset= 'utf-8';    $aop->format='json';    $request = new \AlipayTradePagePayRequest ();    $request->setReturnUrl($aliConfig['returnPcUrl']);    $request->setNotifyUrl($aliConfig['notifyUrl']);    $request->setBizContent(      "{" .      "  \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," .      "  \"subject\":\"$proName\"," .      "  \"out_trade_no\":\"$out_trade_no\"," .      "  \"total_amount\":$order_amount," .      "  \"body\":\"Iphone6 16G\"" .      " }");    //请求    $result = $aop->pageExecute ($request);    //输出    echo $result;  }

附录:

源代码下载>>>

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

  • ThinkPHP实现微信支付(jsapi支付)流程教程详解
  • Thinkphp整合微信支付功能
  • thinkphp整合微信支付代码分享
  • Thinkphp和onethink实现微信支付插件
  • ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
  • ThinkPHP框架整合微信支付之JSAPI模式图文详解
  • ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
  • thinkPHP框架对接支付宝即时到账接口回调操作示例
  • Thinkphp微信公众号支付接口
  • ThinkPHP实现支付宝接口功能实例
  • ThinkPHP框架整合微信支付之刷卡模式图文详解


  • 上一条:
    ThinkPHP框架整合微信支付之JSAPI模式图文详解
    下一条:
    ThinkPHP框架实现FTP图片上传功能示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • thinkphp + mongodb项目中数据加载慢问题分析及解决(0个评论)
    • thinkphp6框架中封装redis操作类(0个评论)
    • thinkphp6框架中实现定时任务功能流程步骤(0个评论)
    • Thinkphp5.1框架中实现Session+Redis会话共享流程步骤(0个评论)
    • TP5框架版本5.0.10安全漏洞根据官方补丁修复,也是本站安全漏洞修复(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-12
    • 2018-01
    • 2018-02
    • 2020-03
    • 2021-07
    • 2021-12
    • 2022-05
    • 2022-06
    • 2022-09
    • 2023-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客