ThinkPHP5.0 实现 app支付宝支付功能

前几天做项目,要求要用到支付宝接口,第一次做,弄了好几天 各种坑啊,简单写一下我做支付宝支付的过程,希望对也是第一次做支付宝支付的童鞋有帮助,

不懂的可以先去支付平台看一下支付宝支付的文档,我是下的demo看的,这个是用tp5.0做的,先上图:

至于支付接口的接口包文件自己下吧,这个我就不提供地址链接了,这个支付接口我用的是异步回调,好像现在版本的支付宝同步回调只能用来跳转页面用了,哎,不说了,看代码吧。

做这个支付宝支付我总共用到了三个控制器:

1:支付宝支付控制器。

2:支付宝支付配置参数控制器。

3:支付宝回调地址控制器。

好了,首先创建个支付宝支付的控制器,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是支付宝支付),代码 如下:

 1 <?php
 2 namespace app\mobile\controller;
 3 use app\mobile\model\Goods;
 4 use app\mobile\model\OrderGoods;
 5 use think\Controller;
 6
 7 class Pay extends Controller
 8 {
 9     public function pay_order()
10     {
11         $res = new OrderGoods();
12         //获取订单号
13         $where[‘id‘] = input(‘post.order_sn‘);
14         $reoderSn = input(‘post.order_sn‘);
15         //查询订单信息
16         $order_info = $res->where($where)->find();
17         //获取支付方式
18         $pay_type = input(‘post.pay_type‘);//微信支付 或者支付宝支付
19         //获取支付金额
20         $money = input(‘post.totle_sum‘);
21         //判断支付方式
22         switch ($pay_type) {
23             case ‘ali‘;//如果支付方式为支付宝支付
24
25                 //更新支付方式为支付宝
26                 $type[‘pay_type‘] = ‘ali‘;
27                 $res->where($where)->update($type);
28
29                 //实例化alipay类
30                 $ali = new Alipay();
31
32                 //异步回调地址
33                 $url = ‘XXXXXXXXXXXXXXXXXX/Callback/aliPayBack‘;
34
35                 $array = $ali->alipay(‘商品名称‘, $money,$reoderSn,  $url);
36
37                 if ($array) {
38                     return $array;
39                 } else {
40                     echo json_encode(array(‘status‘ => 0, ‘msg‘ => ‘对不起请检查相关参数[email protected]‘));
41                 }
42                 break;
43             case ‘wx‘;
44
45                 break;
46         }
47     }
48 }

然后又创建了一个Alipay控制器,写支付宝配置参数,代码如下:

 1 <?php
 2 namespace app\mobile\controller;
 3 use think\Db;
 4 use think\Controller;
 5
 6 class AliPay extends Controller
 7 {
 8
 9     protected $appId = ‘‘;//支付宝AppId
10     protected $rsaPrivateKey = ‘‘;//支付宝私钥
11     protected $aliPayRsaPublicKey = ‘‘;//支付宝公钥(现在用不到)
12     private $seller = ‘‘;//收款人账号
13
14     /*
15      * 支付宝支付
16      */
17     public function aliPay($body, $total_amount, $product_code, $notify_url)
18     {
19         /**
20          * 调用支付宝接口。
21          */
22         import(‘.Alipay.aop.AopClient‘, ‘‘, ‘.php‘);
23         import(‘.Alipay.aop.request.AlipayTradeAppPayRequest‘, ‘‘, ‘.php‘);
24         $content = array();
25         $content[‘body‘] = $body;
26         $content[‘subject‘] = $body;//商品的标题/交易标题/订单标题/订单关键字等
27         $content[‘out_trade_no‘] = $product_code;//商户网站唯一订单号
28         $content[‘timeout_express‘] = ‘1d‘;//该笔订单允许的最晚付款时间
29         $content[‘total_amount‘] = floatval($total_amount);//订单总金额(必须定义成浮点型)
30         $content[‘seller_id‘] = $this->seller;//收款人账号
31         $content[‘product_code‘] = ‘QUICK_MSECURITY_PAY‘;//销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
32         $content = $this->argSort($content);//(固定值)
33         $content = $this->createLinkstring($content);
34         $aop = new \AopClient();
35         $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";//(固定值)
36         $aop->appId = $this->appId;
37         $aop->rsaPrivateKey = $this->rsaPrivateKey;
38         $aop->format = "json";
39         $aop->charset = "UTF-8";
40         $aop->signType = "RSA2";
41         $aop->alipayrsaPublicKey = ‘‘;
42         $request = new \AlipayTradeAppPayRequest();
43         $arr[‘body‘] = $body;
44         $arr[‘subject‘] = $body;
45         $arr[‘out_trade_no‘] = $product_code;
46         $arr[‘timeout_express‘] = ‘30m‘;
47         $arr[‘total_amount‘] = floatval($total_amount);
48         $arr[‘product_code‘] = ‘QUICK_MSECURITY_PAY‘;
49         $json = json_encode($arr);
50         $request->setNotifyUrl($notify_url);
51         $request->setBizContent($json);
52         $response = $aop->sdkExecute($request);
53         return $response;
54     }
55
56     /*************************需要使用到的方法*******************************/
57     /**
58      * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
59      * @param $para 需要拼接的数组
60      * return 拼接完成以后的字符串
61      */
62     function createLinkstring($para)
63     {
64         $arg = "";
65         while (list ($key, $val) = each($para)) {
66             $arg .= $key . "=" . $val . "&";
67         }
68         //去掉最后一个&字符
69         $arg = substr($arg, 0, count($arg) - 2);
70
71         //如果存在转义字符,那么去掉转义
72         if (get_magic_quotes_gpc()) {
73             $arg = stripslashes($arg);
74         }
75
76         return $arg;
77     }
78
79     /**
80      * 对数组排序
81      * @param $para 排序前的数组
82      * return 排序后的数组
83      */
84     function argSort($para)
85     {
86         ksort($para);
87         reset($para);
88         return $para;
89     }
90 }

如果用我这种方法来实现支付宝支付的话,上面的那个支付宝配置参数控制器的内容除了支付宝Appid,支付宝公钥,私钥,收款人账号,其他的照搬下来就行了,现在已经写了两个控制器了,接下来还有一个异步回调地址。这个异步回调太恶心了,支付成功就是不回调,让我整了一晚上。先上代码吧

 1 <?php
 2 namespace app\mobile\controller;
 3 use app\mobile\model\OrderGoods;
 4 use app\mobile\model\IntegralRecord;
 5 use app\admin\model\SystemSettings;
 6 use app\mobile\model\Members;
 7 use think\Controller;
 8 use think\Request;
 9 use think\Db;
10
11 class Callback extends Controller
12 {
13     /*
14      * 支付宝支付回调修改订单状态
15      */
16     public function aliPayBack()
17     {
18
19         if ($_POST[‘trade_status‘] == ‘TRADE_SUCCESS‘) {//如果支付成功
20             //===============修改订单状态===========================//
21             $order = new OrderGoods();//实例化
22             $orderSn = $_POST[‘out_trade_no‘];//获取订单号
23                 $where[‘order_sn‘] = $orderSn;
24                 $data1[‘type‘] = 2;
25             $order->where($where)->update($data1);//修改订单状态
26             echo ‘success‘;
27             exit;
28         }
29     }
30 }

OK现在代码写完了。执行支付宝支付订单的时候先进入支付宝Pay控制器接收POST传递的三个参数,订单号,金额,支付方式。接收到之后写商品名称,商品描述,回调地址等 然后实例化Alipay类调用这个类里面的aliPay方法进行支付,调用结果返回一个签名,把这个签名反馈给app端进行支付,支付成功后执行异步回调,修改订单状态,当然还有一些细节操作就不说了,我是已经弄好了,回调这个地方是个坑,大家做的时候一定要仔细认真,耐心才行。现在流程已经走完了,希望能对做这个功能的童鞋有所帮助。

本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

http://www.cnblogs.com/luokakale/p/7612365.html

时间: 2024-10-10 10:56:33

ThinkPHP5.0 实现 app支付宝支付功能的相关文章

SpringSide集成支付宝支付功能

网络购物很流行,那么最流行的支付手段估计应该是支付宝了,那么怎么样将支付宝集成到自己的环境中呢,今天我来讲一下如何在springside框架中集成支付宝支付功能. 首先,我们去支付宝商家服务页面去注册和申请支付功能,并在那里下载sdk开发包https://b.alipay.com/order/productDetail.htm?productId=2012111200373124,这个是支付宝的即时到账收款功能,然后下面有一个流程的介绍,我们选择下面的技术集成,先下载sdk开发包,下载完成之后解

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)

前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始. 本教程源代码: https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay 一.支付宝测试环境代码测试 1. 下载电脑网站的官方demo: 下载:https://docs.open.alipay.com/270/106291/

支付宝支付功能(使用支付宝sdk)

1.准备参数        新建一个公共参数配置类NewAlipayconfig (可将参数存放到config配置文件中读取)          public class NewAlipayconfig { public NewAlipayconfig() { // // TODO: 在此处添加构造函数逻辑 // } // 应用ID,您的APPID public static string app_id = "1231213"; // 支付宝网关 public static strin

mui实现支付宝支付功能

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>Hello MUI</title> <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"> <

支付宝支付功能

每篇一语:理想很丰满,现实很骨感! 1.alipay 双功能支付简介 2.alipay 提交支付订单 3.alipay 整合双功能支付及发货信息同步 4.alipay 页面跳转同步通知处理 5.alipay 服务器异步通知处理   ======================  华丽丽的分割线  ======================   1.alipay 双功能支付简介   1.0 废话 网上copy的东西那么多,查个东西在百度上google一下都搜不到个完整,我恨!代码还是看自己整理的

thinkphp5.0 微信扫码支付模式二

仅供个人参考,方便大家. 一.1)https://pay.weixin.qq.com/index.php/core/home/login  复制此地址 打开微信商户平台. 2)下载安全操作证书(最好在IE下载): 3)安装后的界面 4)下载证书 5)设置32位秘钥(百度秘钥生成可在线生成): 二.1)https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1  打开此链接下载SDK. 2) 下载后的目录结构 3)在thinkphp

客服端与服务端APP支付宝支付接口联调的那些坑

根据支付宝官方提供的文档的建议: TIPS:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串orderString传给客户端,客户端直接传给SDK发起请求.文档和Demo是为了示例效果在客户端实现. 商品的订单信息和签名应该放在服务端进行,将最好生成的orderString发送给客户端,客户端直接换起支付,处理好回调就ok.思路很简单,但实现却要下番功夫. 坑一: 如果以PHP为服务后台为例,官网是没有提供集成好的PHP运行DEMO,我们的处理方式是参展APPDemo里的思路,和官

cocos2d-x C++ iOS工程集成第三方支付宝支付功能

一.在支付宝开放平台下载支付宝SDK(https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.WWgVz8&treeId=54&articleId=104509&docType=1) 二,添加sdk文件到xcode 1,新建一个aliPaySDK文件夹,提取SDK包中以下文件到此文件夹里,在xcode中添加此文件夹. 2.在xcode中,点击项目名,选择"target"->&quo

java 中调用支付宝支付功能的接口

支付宝接口: 申请支付宝接口服务: 1.https://fuwu.alipay.com/platform/doc.htm#c11   Java-JDK 1.5 SDK 2.https://cshall.alipay.com/enterprise/help_detail.htm?help_id=516349 java 调用jdk服务: 1.https://openhome.alipay.com/platform/document.htm#down 2.https://b.alipay.com/or