博文 > ThinkPHP5.0 实现 app支付宝支付功能

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

Php 10002018-08-01 08:00:00

做这个支付宝支付我总共用到了三个控制器:
1:支付宝支付控制器。
2:支付宝支付配置参数控制器。
3:支付宝回调地址控制器。
首先创建个支付宝支付的控制器,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是支付宝支付),代码 如下:

  1. where($where)->find();
  2. //获取支付方式
  3. $pay_type = input('post.pay_type');//微信支付 或者支付宝支付
  4. //获取支付金额
  5. $money = input('post.totle_sum');
  6. //判断支付方式
  7. switch ($pay_type) {
  8. case 'ali';//如果支付方式为支付宝支付
  9. //更新支付方式为支付宝
  10. $type['pay_type'] = 'ali';
  11. $res->where($where)->update($type);
  12. //实例化alipay类
  13. $ali = new Alipay();
  14. //异步回调地址
  15. $url = 'XXXXXXXXXXXXXXXXXX/Callback/aliPayBack';
  16. $array = $ali->alipay('商品名称', $money,$reoderSn, $url);
  17. if ($array) {
  18. return $array;
  19. } else {
  20. echo json_encode(array('status' => 0, 'msg' => '对不起请检查相关参数!@'));
  21. }
  22. break;
  23. case 'wx';
  24. break;

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

  1. class AliPay extends Controller
  2. {
  3. protected $appId = '';//支付宝AppId
  4. protected $rsaPrivateKey = '';//支付宝私钥
  5. protected $aliPayRsaPublicKey = '';//支付宝公钥
  6. private $seller = '';
  7. /*
  8. * 支付宝支付
  9. */
  10. public function aliPay($body, $total_amount, $product_code, $notify_url)
  11. {
  12. /**
  13. * 调用支付宝接口。
  14. */
  15. /*import('.Alipay.aop.AopClient', '', '.php');
  16. import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');*/
  17. Loader::import('AlipayaopAopClient', EXTEND_PATH);
  18. Loader::import('AlipayaoprequestAlipayTradeAppPayRequest', EXTEND_PATH);
  19. $aop = new AopClient();
  20. $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
  21. $aop->appId = $this->appId;
  22. $aop->rsaPrivateKey = $this->rsaPrivateKey;
  23. $aop->format = "json";
  24. $aop->charset = "UTF-8";
  25. $aop->signType = "RSA2";
  26. $aop->alipayrsaPublicKey = $this->aliPayRsaPublicKey;
  27. $request = new AlipayTradeAppPayRequest();
  28. $arr['body'] = $body;
  29. $arr['subject'] = $body;
  30. $arr['out_trade_no'] = $product_code;
  31. $arr['timeout_express'] = '30m';
  32. $arr['total_amount'] = floatval($total_amount);
  33. $arr['product_code'] = 'QUICK_MSECURITY_PAY';
  34. $json = json_encode($arr);
  35. $request->setNotifyUrl($notify_url);
  36. $request->setBizContent($json);
  37. $response = $aop->sdkExecute($request);
  38. return $response;
  39. }
  40. function createLinkstring($para)
  41. {
  42. $arg = "";
  43. while (list ($key, $val) = each($para)) {
  44. $arg .= $key . "=" . $val . "&";
  45. }
  46. //去掉最后一个&字符
  47. $arg = substr($arg, 0, count($arg) - 2);
  48. //如果存在转义字符,那么去掉转义
  49. if (get_magic_quotes_gpc()) {
  50. $arg = stripslashes($arg);
  51. }
  52. return $arg;
  53. }
  54. function argSort($para)
  55. {
  56. ksort($para);
  57. reset($para);
  58. return $para;
  59. }
  60. }

Alipay支付demo我放在extend目录下了,用这种方法来实现支付宝支付的话,上面的那个支付宝配置参数控制器的内容除了支付宝Appid,支付宝公钥,私钥,收款人账号,其他的照搬下来就行了,现在已经写了两个控制器了,接下来还有一个异步回调地址。

  1. where($where)->update($data1);//修改订单状态
  2. echo 'success';
  3. exit;

OK现在代码写完了。执行支付宝支付订单的时候先进入支付宝Pay控制器接收POST传递的三个参数,订单号,金额,支付方式。接收到之后写商品名称,商品描述,回调地址等 然后实例化Alipay类调用这个类里面的aliPay方法进行支付,调用结果返回一个签名,把这个签名反馈给app端进行支付,支付成功后执行异步回调,修改订单状态