ThinkPHP5.0 实现 app支付宝支付功能
https://mp.weixin.qq.com/s/EbfOmEGN93QAnrZOKVP0Vg
先来个效果图
做这个支付宝支付我总共用到了三个控制器:
1:支付宝支付控制器。
2:支付宝支付配置参数控制器。
3:支付宝回调地址控制器。
首先创建个支付宝支付的控制器,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是支付宝支付),代码 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php namespace app\mobile\controller; use app\mobile\model\Goods; use app\mobile\model\OrderGoods; use think\Controller; class Pay extends Controller { public function pay_order() { $res = new OrderGoods(); //获取订单号 $where [ 'id' ] = input( 'post.order_sn' ); $reoderSn = input( 'post.order_sn' ); //查询订单信息 $order_info = $res ->where( $where )->find(); //获取支付方式 $pay_type = input( 'post.pay_type' ); //微信支付 或者支付宝支付 //获取支付金额 $money = input( 'post.totle_sum' ); //判断支付方式 switch ( $pay_type ) { case 'ali' ; //如果支付方式为支付宝支付 //更新支付方式为支付宝 $type [ 'pay_type' ] = 'ali' ; $res ->where( $where )->update( $type ); //实例化alipay类 $ali = new Alipay(); //异步回调地址 $url = 'XXXXXXXXXXXXXXXXXX/Callback/aliPayBack' ; $array = $ali ->alipay( '商品名称' , $money , $reoderSn , $url ); if ( $array ) { return $array ; } else { echo json_encode( array ( 'status' => 0, 'msg' => '对不起请检查相关参数!@' )); } break ; case 'wx' ; break ; } } } |
然后又创建了一个Alipay控制器,写支付宝配置参数,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | class AliPay extends Controller { protected $appId = '' ; //支付宝AppId protected $rsaPrivateKey = '' ; //支付宝私钥 protected $aliPayRsaPublicKey = '' ; //支付宝公钥 private $seller = '' ; /* * 支付宝支付 */ public function aliPay( $body , $total_amount , $product_code , $notify_url ) { /** * 调用支付宝接口。 */ /*import('.Alipay.aop.AopClient', '', '.php'); import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');*/ Loader::import( 'Alipay\aop\AopClient' , EXTEND_PATH); Loader::import( 'Alipay\aop\request\AlipayTradeAppPayRequest' , EXTEND_PATH); $aop = new \AopClient(); $aop ->gatewayUrl = "https://openapi.alipay.com/gateway.do" ; $aop ->appId = $this ->appId; $aop ->rsaPrivateKey = $this ->rsaPrivateKey; $aop ->format = "json" ; $aop ->charset = "UTF-8" ; $aop ->signType = "RSA2" ; $aop ->alipayrsaPublicKey = $this ->aliPayRsaPublicKey; $request = new \AlipayTradeAppPayRequest(); $arr [ 'body' ] = $body ; $arr [ 'subject' ] = $body ; $arr [ 'out_trade_no' ] = $product_code ; $arr [ 'timeout_express' ] = '30m' ; $arr [ 'total_amount' ] = floatval ( $total_amount ); $arr [ 'product_code' ] = 'QUICK_MSECURITY_PAY' ; $json = json_encode( $arr ); $request ->setNotifyUrl( $notify_url ); $request ->setBizContent( $json ); $response = $aop ->sdkExecute( $request ); return $response ; } function createLinkstring( $para ) { $arg = "" ; while (list ( $key , $val ) = each( $para )) { $arg .= $key . "=" . $val . "&" ; } //去掉最后一个&字符 $arg = substr ( $arg , 0, count ( $arg ) - 2); //如果存在转义字符,那么去掉转义 if (get_magic_quotes_gpc()) { $arg = stripslashes ( $arg ); } return $arg ; } function argSort( $para ) { ksort( $para ); reset( $para ); return $para ; } } |
Alipay支付demo我放在extend目录下了,用这种方法来实现支付宝支付的话,上面的那个支付宝配置参数控制器的内容除了支付宝Appid,支付宝公钥,私钥,收款人账号,其他的照搬下来就行了,现在已经写了两个控制器了,接下来还有一个异步回调地址。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php namespace app\mobile\controller; use app\mobile\model\OrderGoods; use app\mobile\model\IntegralRecord; use app\admin\model\SystemSettings; use app\mobile\model\Members; use think\Controller; use think\Request; use think\Db; class Callback extends Controller { /* * 支付宝支付回调修改订单状态 */ public function aliPayBack() { if ( $_POST [ 'trade_status' ] == 'TRADE_SUCCESS' ) { //如果支付成功 //===============修改订单状态===========================// $order = new OrderGoods(); //实例化 $orderSn = $_POST [ 'out_trade_no' ]; //获取订单号 $where [ 'order_sn' ] = $orderSn ; $data1 [ 'type' ] = 2; $order ->where( $where )->update( $data1 ); //修改订单状态 echo 'success' ; exit ; } } } |
OK现在代码写完了。执行支付宝支付订单的时候先进入支付宝Pay控制器接收POST传递的三个参数,订单号,金额,支付方式。接收到之后写商品名称,商品描述,回调地址等 然后实例化Alipay类调用这个类里面的aliPay方法进行支付,调用结果返回一个签名,把这个签名反馈给app端进行支付,支付成功后执行异步回调,修改订单状态
赞赏码
非学,无以致疑;非问,无以广识
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步