pay.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * 微信支付: 后台下单
  4. *
  5. */
  6. require_once __DIR__ . '/../../../../main.php'; # 导入游戏库
  7. require_once __DIR__ . '/../../Mo/payResp.php'; # 响应模型
  8. require_once __DIR__ . '/../../Mo/payRequest.php'; # 通用请求订单结构
  9. use loyalsoft\CLog; # 添加 use
  10. use loyalsoft\JsonUtil;
  11. use loyalsoft\HttpUtil;
  12. $tag = "[weixin]";
  13. HttpUtil::PostOnly(); # 限定客户端用post
  14. $str = HttpUtil::getQueryString(); # 提取参数串
  15. Clog::pay($tag . " 请求串 " . $str);
  16. // $str=gzinflate($str); # 编码方案
  17. $data = JsonUtil::decode($str); # 提取数据
  18. $req = new PayRequest($data); # 创建订单
  19. $resp = $req->AntiAdditionCheck(); # 防沉迷金额校验
  20. if ($resp->err != 0) {
  21. exit($resp); # 返回
  22. }
  23. CLog::pay("平台字符串" . $req->getPlatStr());
  24. switch ($req->getPlatStr()) { # 根据后缀切换下微信支付的appid(微信后台锁定包名,如果appid不匹配支付不成功).
  25. case "hykb":
  26. require_once __DIR__ . '/wx_hykb.php';
  27. CLog::pay("加载好游快报配置");
  28. break;
  29. default:
  30. require_once __DIR__ . '/wx.php'; # 导入微信支付lib
  31. break;
  32. }
  33. if ($req->InserDataBase()) { # 订单数据入库
  34. CLog::pay($tag . ' 创建订单' . $req);
  35. $input = new WxPayUnifiedOrder(); # 微信下单参数
  36. $input->SetBody($req->product_name); # 商品描述,格式: 应用名称-商品WxPayConfig::APPID . "-" .
  37. $input->SetAttach($req->callbackInfo); # 透传参数
  38. $input->SetOut_trade_no($req->cpOrderId); # cporderidd
  39. $input->SetTotal_fee($req->amount * 100); # 总价格, 单位: 分
  40. $input->SetTime_start(date("YmdHis")); # 开始时间
  41. $input->SetTime_expire(date("YmdHis", time() + 600)); # 过期时间
  42. $input->SetGoods_tag("test"); # 活动标记, 不管
  43. $input->SetNotify_url($req->notifyUrl); # 支付回调地址
  44. $input->SetTrade_type("APP"); # 交易类型,
  45. // $input->SetTrade_type("JSAPI");
  46. // $input->SetOpenid($openId); # jsapi需要,其他非必需
  47. CLog::pay("[weixin]统一下单");
  48. CLog::pay(var_export($input->GetValues(), true));
  49. $order = WxPayApi::unifiedOrder($input); # 向微信后台发起统一订单请求, 返回值是asoc_array
  50. if (isset($order['return_code']) && $order['return_code'] == 'SUCCESS') { # 推送订单请求
  51. if (isset($order["result_code"]) && $order["result_code"] == 'SUCCESS') {# 操作成功
  52. $platPayParams = array(# # 客户端需要的参数
  53. 'appid' => WxPayConfig::APPID, # # 微信开平分配的appid
  54. 'partnerid' => WxPayConfig::MCHID, # # 微信支付平台分配的商户id
  55. 'prepayid' => $order["prepay_id"], # # 预支付交易会话id (微信返回的支付交易会话ID)
  56. 'package' => 'Sign=WXPay', # # 扩展字段, 固定值Sign=WXPay
  57. 'noncestr' => WxPayApi::getNonceStr(), # # 随机字符串
  58. 'timestamp' => \loyalsoft\now(), # # 时间戳
  59. );
  60. $_sign = WxPayConfig::MakeSign($platPayParams); # 计算下签名
  61. $platPayParams["sign"] = $_sign; # 附加签名
  62. $platPayParams['extData'] = $req->callbackInfo; # 透传参数
  63. $ret = array(# # 返回值
  64. 'err' => 0, # # 错误码
  65. 'platformCode' => 'wx', # # 平台 wx/zfbs
  66. 'cpOrderId' => $req->cpOrderId, # # 渠道订单号
  67. 'platformInfo' => $platPayParams # 微信所需参数
  68. );
  69. echo json_encode($ret); # 返回客户端
  70. CLog::pay("[$tag.pay]向$tag 后台推送订单成功" . $req);
  71. } else {
  72. CLog::pay("[$tag.pay]向$tag 后台推送订单操作失败." . $order['err_code_des']);
  73. echo payResp::err($order['err_code'], $order['err_code_des']);
  74. }
  75. } else {
  76. CLog::pay($order);
  77. CLog::pay("[$tag.pay]向$tag 后台推送订单失败, 通讯失败.");
  78. echo payResp::err(1, "微信统一下单请求,通讯失败!");
  79. }
  80. // echo Resp::ok($req->retData()); # 返回值
  81. } else {
  82. CLog::pay($tag . ' 创建订单失败' . $req);
  83. echo payResp::err(1, '后台创建订单失败'); # 返回值
  84. }