P686Payment.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/3/7
  6. * Time: 14:48
  7. */
  8. namespace Biz\Pay\Payment;
  9. use Biz\Pay\NewBasePayment;
  10. use Biz\Pay\PayInfo;
  11. class P686Payment extends NewBasePayment
  12. {
  13. /**
  14. * 接收通知
  15. * @param array $data
  16. * @return void
  17. */
  18. function notify(array $data)
  19. {
  20. $param = array(
  21. 'outOrderNo' => strip_tags($data['outOrderNo']),
  22. 'goodsClauses' => strip_tags($data['goodsClauses']),
  23. 'tradeAmount' => strip_tags($data['tradeAmount']),
  24. 'shopCode' => strip_tags($data['shopCode']),
  25. 'code' => strip_tags($data['code']),
  26. 'nonStr' => strip_tags($data['nonStr']),
  27. 'msg' => strip_tags($data['msg']),
  28. );
  29. $sign = trim(strip_tags($data['sign']));
  30. $order_no = $data['outOrderNo'];
  31. $price = $data['tradeAmount'];
  32. $real_price = $data['tradeAmount'];
  33. $bill_no = $data['outOrderNo'];
  34. $this->checkSign($param, $sign, $order_no, $price, $real_price, $is_bill_no = 0, $bill_no);
  35. }
  36. /**
  37. * 返回跳转
  38. * @param array $data
  39. * @return void [type] [description]
  40. */
  41. function redirect(array $data)
  42. {
  43. }
  44. /**
  45. * 检查支付信息
  46. * @return void [type] 0=失败,1=成功
  47. */
  48. function check()
  49. {
  50. }
  51. /**
  52. * 构建订单提交数组
  53. * @return array
  54. */
  55. function buildOrder(): array
  56. {
  57. $arr = array(
  58. 'code' => $this->paymentConfig['merchant_id'],
  59. 'tradeAmount' => $this->dataAccess->money,
  60. 'payCode' => $this->dataAccess->payType,
  61. 'notifyUrl' => $this->notifyUrl,
  62. 'goodsClauses' => $this->dataAccess->goodsName ?? 'GoodsName',
  63. 'outOrderNo' => $this->dataAccess->orderSn,
  64. );
  65. $arr['sign'] = $this->buildSign($arr, $this->paymentConfig['merchant_md5_secret']);
  66. return $arr;
  67. }
  68. /**
  69. * 生成签名函数
  70. * @param array $param
  71. * @param string $merchantSecret
  72. * @return mixed
  73. */
  74. function buildSign(array $param, $merchantSecret)
  75. {
  76. if (!is_array($param)) {
  77. return false;
  78. }
  79. ksort($param);
  80. $signStr = '';
  81. foreach ($param as $k => $v) {
  82. if (!$v) continue;
  83. $signStr .= "{$k}={$v}&";
  84. }
  85. $signStr .= "key={$merchantSecret}";
  86. return (md5($signStr));
  87. }
  88. /**
  89. * 重写基类跳转函数,若直接跳转收银台类接口不需要重写本函数
  90. * @param PayInfo $pay_info
  91. */
  92. protected function jump(PayInfo $pay_info)
  93. {
  94. $json = $this->goPayCurl($this->apiUrl, $pay_info->orderInfo);
  95. $ret = json_decode($json, 1);
  96. if (!$ret || $ret['payState'] === 'fail') {
  97. die($ret['message'] ?? '请求失败!请重试!');
  98. }
  99. $dpgateName = '';//自定义二维码页面扫码方式中文名称
  100. switch ($pay_info->orderInfo['payCode']) {
  101. case 'wxh5':
  102. case 'alipay_h5':
  103. case "wxpay_wap":
  104. header('Location:' . $linkUrl = $ret['url']);//H5跳转
  105. break;
  106. case 'alipay':
  107. $dpgateName = '支付宝';
  108. break;
  109. case 'wxpay':
  110. $dpgateName = '微信';
  111. break;
  112. }
  113. $qrcodeUrl = $ret['qrCodeUrl'];
  114. $this->prePay(1, $qrcodeUrl, $dpgateName);
  115. }
  116. /**
  117. * 基础配置
  118. * @return void
  119. */
  120. function config()
  121. {
  122. $this->apiUrl = "http://120.77.165.254/Tips.php/686cz/trade/pay";
  123. $this->success = "SUCCESS";
  124. }
  125. /**
  126. * 设置返回类型
  127. * @param string $type
  128. */
  129. function setReturnType($type = 'HTML')
  130. {
  131. }
  132. /**
  133. * 发起支付函数
  134. * @return mixed
  135. */
  136. function goPay()
  137. {
  138. return $this->prePay();
  139. }
  140. }