PayHandler.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace common\pay\balpal;
  3. use backend\models\Deposit;
  4. use common\pay\BasePayHandler;
  5. use Yii;
  6. class PayHandler extends BasePayHandler
  7. {
  8. public $payUrl;
  9. public $merCd;
  10. public $secretKey;
  11. /**
  12. * @inheritdoc
  13. */
  14. public function init()
  15. {
  16. parent::init();
  17. if ($this->payUrl == null) {
  18. $this->payUrl = Yii::$app->params['balpal.payUrl'];
  19. }
  20. if ($this->merCd == null) {
  21. $this->merCd = Yii::$app->params['balpal.merCd'];
  22. }
  23. if ($this->secretKey == null) {
  24. $this->secretKey = Yii::$app->params['balpal.secretKey'];
  25. }
  26. }
  27. /**
  28. * @param array $deposit
  29. * @param array $params
  30. * @return string
  31. */
  32. public function outPay($deposit, $params = [])
  33. {
  34. $data = [];
  35. $data['versionNo'] = 'V01'; // 版本号 V01固定
  36. $data['txnCd'] = 'T00100'; // 交易类型
  37. // $data['insCd'] = ''; // 机构号
  38. $data['merCd'] = $this->merCd; // 商户号
  39. $data['merOrderNo'] = 'SN0000000000' . $deposit['id']; // 商户订单号
  40. $data['txnSubmitTime'] = date('YmdHis'); // 提交时间 YYYYMMDDhhmmss格式
  41. $data['txnAmt'] = number_format($deposit['rmb'], 2, '.', ''); // 金额 单位:元
  42. $data['txnGoodsName'] = 'RJ' . $deposit['id']; // 商品名称 需进行URLEncoder编码
  43. // $data['txnGoodsDesc'] = ''; // 商品描述 需进行URLEncoder编码
  44. // $data['txnOrderDesc'] = ''; // 订单描述 需进行URLEncoder编码
  45. $data['pageBackUrl'] = $this->returnUrl; // 前台通知地址
  46. $data['notifyUrl'] = $this->notifyUrl; // 后台通知地址
  47. $data['bankCode'] = $params['bankCode']; // 银行简称
  48. // $data['remarks'] = ''; // 交易备注
  49. $data['signType'] = 'HmacSHA1'; // 签名类型 不参与签名(HmacSHA1)
  50. $data['signData'] = PayUtils::makeSign($data, $this->secretKey); // 签名数据 不参与签名
  51. return static::createHtml($data, $this->payUrl);
  52. }
  53. /**
  54. * @param array $data
  55. * @return bool
  56. */
  57. public function handleNotify($data)
  58. {
  59. if (isset($data['txnAmt'])) {
  60. $data['txnAmt'] = number_format($data['txnAmt'], 2, '.', '');
  61. }
  62. if (PayUtils::checkSign($data, $this->secretKey)) {
  63. if (isset($data['txnSta']) && $data['txnSta'] == '000000') {
  64. $merOrderId = trim($data['merOrderNo']);
  65. $merOrderId = str_ireplace("SN0000000000", "", $merOrderId);
  66. /** @var Deposit $model */
  67. $model = Deposit::find()->where(['id' => $merOrderId])->asArray()->limit(1)->one();
  68. if ($model) {
  69. // $model->type = 1;
  70. // $model->save(false);
  71. return true;
  72. }
  73. }
  74. }
  75. return false;
  76. }
  77. /**
  78. * @param bool $success
  79. * @return string
  80. */
  81. public function outNotify($success)
  82. {
  83. if ($success == true) {
  84. return "OK";
  85. } else {
  86. return "FAIL";
  87. }
  88. }
  89. /**
  90. * @param array $data
  91. * @return bool
  92. */
  93. public function handleReturn($data)
  94. {
  95. if (isset($data['txnAmt'])) {
  96. $data['txnAmt'] = number_format($data['txnAmt'], 2, '.', '');
  97. }
  98. if (PayUtils::checkSign($data, $this->secretKey)) {
  99. if (isset($data['txnSta']) && $data['txnSta'] == '000000') {
  100. $merOrderId = trim($data['merOrderNo']);
  101. $merOrderId = str_ireplace("SN0000000000", "", $merOrderId);
  102. /** @var Deposit $model */
  103. $model = Deposit::find()->where(['id' => $merOrderId])->asArray()->limit(1)->one();
  104. if ($model) {
  105. return true;
  106. }
  107. }
  108. }
  109. return false;
  110. }
  111. /**
  112. * @param bool $success
  113. */
  114. public function outReturn($success)
  115. {
  116. }
  117. }