SanJinService.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace App\Services\Payment;
  3. use GuzzleHttp\Client;
  4. use GuzzleHttp\Exception\RequestException;
  5. use GuzzleHttp\Psr7\Response;
  6. use App\Services\BaseService;
  7. class SanJinService extends BaseService
  8. {
  9. // SanJin payment service methods would go here
  10. const REQUEST_URL = 'https://api.qbdf13.com/';
  11. const ALIPAY_TO_CARD = 'DF001'; // 支付宝转卡
  12. const ALIPAY_TO_ALIPAY = 'DF002'; // 支付宝转支付宝
  13. const PROVISION_TO_CARD = 'DF003'; // 备付金转卡
  14. const PROVISION_TO_ALIPAY = 'DF004'; // 备付金转支付宝
  15. const NUMBER_RMB = 'DF005'; // 数字人民币
  16. // 获取异步的通知地址
  17. public static function getNotifyUrl()
  18. {
  19. return 'https://botpc28.testx2.cc/api/pay/notify';
  20. }
  21. // 获取商户ID
  22. public static function getMerchantId()
  23. {
  24. return config('app.tree_payment_merchant_id');
  25. }
  26. // 获取商户ID
  27. public static function getSecret()
  28. {
  29. return config('app.tree_payment_secret');
  30. }
  31. /**
  32. * @description: 获取请求客户端
  33. * @return {*}
  34. */
  35. public static function getClient(): Client
  36. {
  37. return new Client([
  38. 'base_uri' => self::REQUEST_URL,
  39. 'timeout' => 5.0,
  40. ]);
  41. }
  42. /**
  43. * @description: 查询商户余额
  44. * @return {array}
  45. * {array.success - 是否成功 true|false}
  46. * {array.msg - 返回错误消息}
  47. * {array.code - 返回状态码:200成功,其他失败}
  48. * {array.timestamp - 时间戳 13位}
  49. * {array.data - 商户余额}
  50. */
  51. public static function findBalance()
  52. {
  53. $merchant_id = self::getMerchantId();
  54. $secret = self::getSecret();
  55. $sign = md5($merchant_id . $secret);
  56. $data = [
  57. 'merchantNum' => $merchant_id,
  58. 'sign' => $sign,
  59. ];
  60. $client = self::getClient();
  61. $response = $client->get('api/findBalance', [
  62. 'query' => $data,
  63. ]);
  64. $body = $response->getBody();
  65. return json_decode($body->getContents(), true);
  66. }
  67. /**
  68. * @description: 查询代付订单信息
  69. * @param {*} $order_no 代付订单
  70. * @return {array} $result
  71. */
  72. public static function findPayoutOrderInfo($order_no)
  73. {
  74. $merchant_id = self::getMerchantId();
  75. $secret = self::getSecret();
  76. $data = [];
  77. $data['merchantNum'] = $merchant_id;
  78. $data['orderNo'] = $order_no;
  79. $sign = md5($merchant_id.$order_no.$secret);
  80. $data['sign'] = $sign;
  81. $client = self::getClient();
  82. $response = $client->get('api/findPayoutOrderInfo', [
  83. 'query' => $data,
  84. ]);
  85. $body = $response->getBody();
  86. return json_decode($body->getContents(), true);
  87. }
  88. /**
  89. * @description: 查询代收订单信息
  90. * @param {*} $order_no 代收订单
  91. * @return {array} $result
  92. */
  93. public static function findPayOrderInfo($order_no)
  94. {
  95. $merchant_id = self::getMerchantId();
  96. $secret = self::getSecret();
  97. $data = [];
  98. $data['merchantNum'] = $merchant_id;
  99. $data['orderNo'] = $order_no;
  100. $sign = md5($merchant_id.$order_no.$secret);
  101. $data['sign'] = $sign;
  102. $client = self::getClient();
  103. $response = $client->get('api/findPayOrderInfo', [
  104. 'query' => $data,
  105. ]);
  106. $body = $response->getBody();
  107. return json_decode($body->getContents(), true);
  108. }
  109. // 代收
  110. public static function pay($amount, $order_no, $payType = self::ALIPAY_TO_ALIPAY)
  111. {
  112. $data = [];
  113. $merchant_id = self::getMerchantId();
  114. $secret = self::getSecret();
  115. $notify_url = self::getNotifyUrl();
  116. $data['merchantNum'] = $merchant_id;
  117. $data['amount'] = $amount;
  118. $data['orderNo'] = $order_no;
  119. $data['notifyUrl'] = $notify_url;
  120. $data['payType'] = $payType;
  121. // $data['returnUrl'] = $return_url;
  122. $signStr = $merchant_id . $order_no . $amount . $secret;
  123. $sign = md5($signStr);
  124. $data['sign'] = $sign;
  125. $client = self::getClient();
  126. $response = $client->post('api/pay', [
  127. 'form_params' => $data,
  128. 'headers' => [
  129. 'Content-Type' => 'application/x-www-form-urlencoded',
  130. ]
  131. ]);
  132. $body = $response->getBody();
  133. $result = json_decode($body->getContents(), true);
  134. return $result;
  135. }
  136. // 代付
  137. public static function payout($amount, $order_no, $bank_name, $account, $card_no, $payType = self::ALIPAY_TO_ALIPAY)
  138. {
  139. $data = [];
  140. $merchant_id = self::getMerchantId();
  141. $secret = self::getSecret();
  142. $notify_url = self::getNotifyUrl();
  143. $data['merchantNum'] = $merchant_id;
  144. $data['amount'] = $amount;
  145. $data['orderNo'] = $order_no;
  146. $data['notifyUrl'] = $notify_url;
  147. $data['payType'] = $payType;
  148. switch($payType){
  149. case self::ALIPAY_TO_ALIPAY:
  150. $bank_name = '支付宝';
  151. break;
  152. case self::NUMBER_RMB:
  153. $bank_name = '数字人民币';
  154. break;
  155. }
  156. $signStr = $merchant_id . $order_no . $amount . $secret;
  157. $sign = md5($signStr);
  158. $data['sign'] = $sign;
  159. $data['bankName'] = $bank_name;
  160. $data['account'] = $account;
  161. $data['cardNumber'] = $card_no;
  162. $client = self::getClient();
  163. $response = $client->post('api/payout', [
  164. 'form_params' => $data,
  165. 'headers' => [
  166. 'Content-Type' => 'application/x-www-form-urlencoded',
  167. ]
  168. ]);
  169. $body = $response->getBody();
  170. $result = json_decode($body->getContents(), true);
  171. return $result;
  172. }
  173. /**
  174. * @description: 异步通知签名加密
  175. * @param {*} $state
  176. * @param {*} $order_no
  177. * @param {*} $amount
  178. * @return {*}
  179. */
  180. public static function verifyNotifySign($state,$order_no,$amount)
  181. {
  182. $merchant_id = self::getMerchantId();
  183. $secret = self::getSecret();
  184. $sign = md5($state.$merchant_id.$order_no.$amount,$secret);
  185. return $sign;
  186. }
  187. }