pay.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * ps. 这一步其实没有跟支付宝后台交互,只是服务器自己计算的签名等信息,
  4. * 因为签名秘钥不适合放在客户端. (wg)
  5. *
  6. */
  7. require_once __DIR__ . '/../../../../main.php'; # 导入游戏库
  8. require_once __DIR__ . '/../../Mo/resp.php'; # 响应模型
  9. require_once __DIR__ . '/../../Mo/payRequest.php';
  10. require_once __DIR__ . '/AopSdk.php'; # 导入alipay库
  11. require_once __DIR__ . '/config_alipay.php'; # 导入配置文件
  12. use loyalsoft\CLog; # 添加 use
  13. use loyalsoft\JsonUtil;
  14. use loyalsoft\HttpUtil;
  15. HttpUtil::PostOnly(); # 限定客户端用post
  16. $str = HttpUtil::getQueryString(); # 提取参数串
  17. // $str=gzinflate($str); # 编码方案
  18. $data = JsonUtil::decode($str);
  19. $req = new PayRequest($data); # 创建订单
  20. $cfg = loyalsoft\config_alipay::Inst();
  21. $req->notifyUrl = $cfg->notify_Url; # 给客户端传递回调URL.
  22. $req->InserDataBase(); # 将订单插入数据库
  23. CLog::pay('[alipay.pay]创建订单' . $req); # 日志
  24. // SDK已经封装掉了公共参数,这里只需要传入业务参数: https://docs.open.alipay.com/204/105465/
  25. $bizcontent = "{\"body\":\"" . $req->product_name . "\","
  26. . "\"subject\": \"龙游科技\","
  27. . "\"out_trade_no\": \"" . $req->cpOrderId . "\","
  28. . "\"timeout_express\": \"30m\","
  29. . "\"total_amount\": \"" . $req->amount . "\"," # 这里单位是元, 注意检查
  30. . "\"product_code\":\"QUICK_MSECURITY_PAY\","
  31. . "\"passback_params\":\"" . $req->callbackInfo . "\"" # 透传参数
  32. . "}";
  33. $aop = new AopClient(); # 客户端
  34. $aop->appId = $cfg->appId; # "app_id";
  35. $aop->gatewayUrl = $cfg->gatewayUrl; # 支付宝网关
  36. $aop->alipayrsaPublicKey = $cfg->alipayrsaPublicKey;
  37. $aop->rsaPrivateKey = $cfg->rsaPrivateKey;
  38. $aop->format = "json";
  39. $aop->charset = "UTF-8";
  40. $aop->signType = "RSA2";
  41. //实例化具体API对应的request类,类名称和接口名称对应,
  42. $request = new AlipayTradeAppPayRequest(); # 当前调用接口名称:alipay.trade.app.pay
  43. $request->setNotifyUrl($cfg->notify_Url);
  44. $request->setBizContent($bizcontent);
  45. $response = $aop->sdkExecute($request); # 这里和普通的接口调用不同,使用的是sdkExecute
  46. $ret = array(# # 返回值
  47. 'err' => 0, # # 错误码
  48. 'platformCode' => 'zfb', # # 平台
  49. 'cpOrderId' => $req->cpOrderId, # # 渠道订单号
  50. 'platformInfo' => base64_encode($response) # token串
  51. );
  52. echo json_encode($ret); # 返回客户端