PayHandler.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace common\pay\renren;
  3. use backend\models\Config;
  4. use backend\models\Deposit;
  5. use backend\models\SyncDesposit;
  6. use common\helpers\Utils;
  7. use common\pay\BasePayHandler;
  8. use Yii;
  9. class PayHandler extends BasePayHandler
  10. {
  11. public $payUrl;
  12. public $MerchantID;
  13. public $secretKey;
  14. /**
  15. * @inheritdoc
  16. */
  17. public function init()
  18. {
  19. parent::init();
  20. if ($this->payUrl == null) {
  21. $this->payUrl = Yii::$app->params['renren.payUrl'];
  22. }
  23. if ($this->MerchantID == null) {
  24. $this->MerchantID = Yii::$app->params['renren.MerchantID'];
  25. }
  26. if ($this->secretKey == null) {
  27. $this->secretKey = Yii::$app->params['renren.secretKey'];
  28. }
  29. }
  30. /**
  31. * @param array $deposit
  32. * @param array $params
  33. * @return string
  34. */
  35. public function outPay($deposit, $params = [])
  36. {
  37. $data = [];
  38. $data['TradeType'] = 'bis.pay.submit'; // 交易类型
  39. $data['OperatorID'] = $this->MerchantID;
  40. $data['PayType'] = '0202'; // 支付类型
  41. $data['TerminalType'] = 'PC'; // 终端类型
  42. // $data['MemberID'] = ''; // 用户编号 快捷支付必填
  43. $data['MerchantID'] = $this->MerchantID; // 商户编号
  44. // $data['AppID'] = ''; // 公众号appid
  45. // $data['OpenID'] = ''; // 微信openid
  46. $data['BankID'] = isset($params['bankCode']) ? $params['bankCode'] : ''; // 银行代码
  47. $data['OrderID'] = $deposit['order_sn']; // 订单号
  48. // $data['DeviceID'] = ''; // 设备号
  49. $data['Subject'] = 'RJ' . $deposit['id']; // 商品名称
  50. $data['MachineIP'] = isset($params['ip']) ? $params['ip'] : Utils::getClientIp(); // 终端IP
  51. $data['NotifyUrl'] = $this->notifyUrl; // 通知地址
  52. $data['ReturnUrl'] = $this->returnUrl; // 返回地址
  53. $data['SubmitTime'] = date('YmdHis'); // 订单提交时间
  54. // $data['OrderValidity'] = ''; // 订单有效截止时间
  55. $data['CreditLimit'] = '1'; // 信用卡限制使用标识
  56. $data['Amt'] = $deposit['rmb'] * 100; // 交易金额 单位为分,不含小数点
  57. // $data['Summary'] = ''; // 交易附言
  58. $data['Sign'] = PayUtils::makeSign($data, $this->secretKey); // 签名
  59. return static::createHtml($data, $this->payUrl);
  60. }
  61. /**
  62. * @param array $data
  63. * @return bool
  64. */
  65. public function handleNotify($data)
  66. {
  67. if (PayUtils::checkSign($data, $this->secretKey)) {
  68. if (isset($data['RetStatus']) && $data['RetStatus'] == 0 && isset($data['DealStatus']) && $data['DealStatus'] == 0
  69. && isset($data['Status']) && $data['Status'] == '02'
  70. ) {
  71. $merOrderId = trim($data['OrderID']);
  72. /** @var Deposit $model */
  73. $reuslt = Deposit::find()->where(['order_sn' => $merOrderId])->asArray()->limit(1)->one();
  74. if ($reuslt['type'] != 1) {
  75. $res = Deposit::updateAll(['type' => 1], "order_sn = $merOrderId");
  76. $configData = Config::find()->asArray()->one();
  77. if ($configData['auto_deposit'] == 1 && $res) {
  78. $syncDespositModel = new SyncDesposit();
  79. $syncDespositModel->login = $reuslt['login'];
  80. $syncDespositModel->amount = $reuslt['amount'];
  81. $syncDespositModel->comment = 'Deposit';
  82. $syncDespositModel->memo = $merOrderId;
  83. $syncDespositModel->type = 2;
  84. $syncDespositModel->in_time = time();
  85. $syncDespositModel->save();
  86. }
  87. return true;
  88. }
  89. }
  90. }
  91. return false;
  92. }
  93. public function outNotify($success)
  94. {
  95. if ($success == true) {
  96. return "SUCCESS";
  97. } else {
  98. return "FAIL";
  99. }
  100. }
  101. /**
  102. * @param array $data
  103. * @return bool
  104. */
  105. public function handleReturn($data)
  106. {
  107. if (PayUtils::checkSign($data, $this->secretKey)) {
  108. if (isset($data['RetStatus']) && $data['RetStatus'] == 0 && isset($data['DealStatus']) && $data['DealStatus'] == 0) {
  109. $merOrderId = trim($data['OrderID']);
  110. /** @var Deposit $model */
  111. $model = Deposit::find()->where(['id' => $merOrderId])->asArray()->limit(1)->one();
  112. if ($model) {
  113. return true;
  114. }
  115. }
  116. }
  117. return false;
  118. }
  119. public function outReturn($success)
  120. {
  121. }
  122. }