thinkphp5对接支付宝扫码支付(ThinkPHP框架下整合支付宝支付功能图文教程)
thinkphp5对接支付宝扫码支付
ThinkPHP框架下整合支付宝支付功能图文教程本文实例讲述了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框架的php程序设计有所帮助。
原文链接:https://blog.csdn.net/u011415782/article/details/74747805
- thinkphp3.2.3 接口开发(ThinkPHP3.2.3框架Memcache缓存使用方法实例总结)
- thinkphp导入excel(Yii框架使用PHPExcel导出Excel文件的方法分析改进版)
- thinkphp快速入门手册(从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解)
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- thinkphp5配置入口路径(ThinkPHP5.1框架数据库链接和增删改查操作示例)
- thinkphp5表单系统(thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例)
- thinkphp框架详解(thinkphp3.2框架中where条件查询用法总结)
- thinkphp返回json(thinkphp5框架实现数据库读取的数据转换成json格式示例)
- thinkphp使用说明(thinkphp框架使用JWTtoken的方法详解)
- thinkphp分页效果怎样(thinkphp5+layui实现的分页样式示例)
- thinkphp5对接支付宝扫码支付(ThinkPHP框架下整合支付宝支付功能图文教程)
- thinkphp5框架怎么打开(thinkphp5.1框架中容器Container和门面Facade的实现方法分析)
- thinkphp数据库使用(thinkphp3.2同时连接两个数据库的简单方法)
- php微信支付怎么做(ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解)
- thinkphp静态怎么设置(浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法)
- thinkphp控制器怎么设置自定义(Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例)
- 乔欣 古装剧中的高颜值(古装剧中的高颜值)
- 怎么才可以财富自由(如何让自己实现财富自由)
- 为什么越来越多年轻人回农村(为什么越来越多年轻人回农村生活)
- 怎么快速学好英语(怎么快速学好英语初中)
- 中国留学生都是富二代吗()
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
热门推荐
- Asp.net导出Excel乱码
- mysqlmha架构图(MySQL之MHA高可用配置及故障切换实现详细部署步骤)
- 西部数码服务器月目录是什么(西部数码云服务器如何续费)
- 无法启动sql serveragent(SQL Agent服务无法启动的解决方法)
- MySql存储过程
- sqlserver常用的字符串函数(SqlServer 获取字符串中小写字母的sql语句)
- laravel获取数据(laravel 判断查询数据库返回值的例子)
- php无法读取txt文件(php写入txt乱码的解决方法)
- 微信小程序scrollview 截图(微信小程序scroll-view不能左右滑动问题的解决方法)
- css style常用属性(CSS中的content属性使用教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9