JubaofuPayment.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/3/6
  6. * Time: 10:44
  7. */
  8. namespace Biz\Pay\Payment;
  9. use Biz\Pay\NewBasePayment;
  10. class JubaofuPayment extends NewBasePayment
  11. {
  12. /**
  13. * 接收通知
  14. * @param array $data
  15. * @return void
  16. */
  17. function notify(array $data)
  18. {
  19. // TODO: Implement notify() method.
  20. }
  21. /**
  22. * 返回跳转
  23. * @param array $data
  24. * @return void [type] [description]
  25. */
  26. function redirect(array $data)
  27. {
  28. // TODO: Implement redirect() method.
  29. }
  30. /**
  31. * 检查支付信息
  32. * @return void [type] 0=失败,1=成功
  33. */
  34. function check()
  35. {
  36. // TODO: Implement check() method.
  37. }
  38. /**
  39. * 构建订单提交数组
  40. * @return array
  41. */
  42. function buildOrder(): array
  43. {
  44. $data = array(
  45. 'charset' => "UTF-8",
  46. 'merchantCode' => $this->paymentConfig['merchant_id'],
  47. 'orderNo' => $this->dataAccess->orderSn,
  48. 'amount' => $this->dataAccess->money * 100,
  49. 'channel' => 'BANK',
  50. 'bankCode' => $this->dataAccess->payType,
  51. 'remark' => $this->dataAccess->goodsName ?? 'GoodsDetail',
  52. 'notifyUrl' => $this->notifyUrl,
  53. 'returnUrl' => $this->redirectUrl,
  54. 'extraReturnParam' => $this->dataAccess->orderSn,
  55. 'signType' => 'RSA',
  56. );
  57. $sign = $this->buildPaySign($data);
  58. $data['sign'] = $sign;
  59. return $data;
  60. }
  61. /**
  62. * 生成签名函数
  63. * @param array $param
  64. * @param string $merchantSecret
  65. * @return mixed
  66. */
  67. function buildSign(array $param, $merchantSecret)
  68. {
  69. $data = $param;
  70. $signData = "charset={$data['charset']}&merchantCode={$data['merchantCode']}&orderNo={$data['orderNo']}"
  71. . "&amount={$data['amount']}&channel=BANK&bankCode={$data['bankCode']}&remark={$data['remark']}"
  72. . "&notifyUrl={$data['notifyUrl']}&returnUrl={$data['returnUrl']}&extraReturnParam={$data['extraReturnParam']}";
  73. $private = $this->paymentConfig['merchant_pri_key'];
  74. $pi_key = openssl_pkey_get_private($private);
  75. openssl_sign($signData, $sign, $pi_key, OPENSSL_ALGO_SHA1);
  76. $sign = base64_encode($sign);
  77. $sign = urlencode($sign);
  78. $sign = str_replace('%2F', '/', $sign);
  79. $sign = str_replace('%3D', '=', $sign);
  80. return $sign = str_replace('%2B', '+', $sign);
  81. }
  82. /**
  83. * 生成付款签名函数
  84. * @param $data
  85. * @return mixed
  86. */
  87. protected function buildPaySign($data)
  88. {
  89. $signData = "charset={$data['charset']}&merchantCode={$data['merchantCode']}&orderNo={$data['orderNo']}"
  90. . "&amount={$data['amount']}&channel=BANK&bankCode={$data['bankCode']}&remark={$data['remark']}"
  91. . "&notifyUrl={$data['notifyUrl']}&returnUrl={$data['returnUrl']}&extraReturnParam={$data['extraReturnParam']}";
  92. $private = $this->paymentConfig['merchant_pri_key'];
  93. $private = $this->formatRsaSecret($private);
  94. $pi_key = openssl_pkey_get_private($private);
  95. openssl_sign($signData, $sign, $pi_key, OPENSSL_ALGO_SHA1);
  96. $sign = base64_encode($sign);
  97. $sign = urlencode($sign);
  98. $sign = str_replace('%2F', '/', $sign);
  99. $sign = str_replace('%3D', '=', $sign);
  100. return $sign = str_replace('%2B', '+', $sign);
  101. }
  102. /**
  103. * 基础配置
  104. * @return void
  105. */
  106. function config()
  107. {
  108. $this->apiUrl = 'https://api.jubaopays.com/gateway/bank';
  109. $this->success = 'SUCCESS';
  110. }
  111. /**
  112. * 设置返回类型
  113. * @param string $type
  114. */
  115. function setReturnType($type = 'HTML')
  116. {
  117. // TODO: Implement setReturnType() method.
  118. }
  119. /**
  120. * 发起支付函数
  121. * @return mixed
  122. */
  123. function goPay()
  124. {
  125. $this->prePay();
  126. }
  127. }