MoBaoPayment.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace Biz\Pay\Payment;
  3. /**
  4. * 银宝支付
  5. */
  6. class MoBaoPayment extends \Biz\Pay\BasePayment {
  7. protected $getWay = "http://saascashier.mobaopay.com/cgi-bin/netpayment/pay_gate.cgi";
  8. protected $paymentName = "MoBao";
  9. function init() {
  10. $this->privateCertPath = '';
  11. $this->publicCertPath = '';
  12. $this->sellerInfo = array(
  13. 'busKey' => '2e1528883db134b55217a318d825ab6e',
  14. 'busId' => '2111641497951153',
  15. 'busAccount' => '2111641497951153',
  16. );
  17. }
  18. public function toPay() {
  19. $paymentTypes = $this->getPaymentType();
  20. if (array_key_exists($this->dataAccess->payType, $paymentTypes)) {
  21. $payType = $paymentTypes[$this->dataAccess->payType];
  22. } else {
  23. $payType = 1;
  24. }
  25. $data = array(
  26. 'apiName' => 'WEB_PAY_B2C', //接口名称
  27. 'apiVersion' => '1.0.0.0', //接口版本
  28. 'platformID' => $this->sellerInfo['busId'], //商户ID
  29. 'merchNo' => $this->sellerInfo['busAccount'], //商户账号
  30. 'orderNo' => $this->dataAccess->orderSn, //商户订单号
  31. 'tradeDate' => date('Ymd', time()), //交易日期
  32. 'amt' => $this->dataAccess->money, //订单金额
  33. 'merchUrl' => $this->notifyUrl, //支付结果通知地址
  34. 'merchParam' => '', //支付结果通知地址
  35. 'tradeSummary' => 'user recharge', //支付结果通知地址
  36. );
  37. $sign = $this->md5mcrypt($data, $this->sellerInfo['busKey']);
  38. $data['choosePayType'] = $payType; //支付方式
  39. $data['bankCode'] = $this->dataAccess->bankCode;
  40. //银行代码
  41. $data['merchParam'] = '';
  42. $data['tradeSummary'] = 'user recharge';
  43. $data['signMsg'] = $sign; //签名
  44. $data = $this->goPay($data);
  45. }
  46. function md5mcrypt($data, $key) {
  47. // ksort($data);
  48. $str = http_build_query($data) . $key;
  49. $str = urldecode($str);
  50. return md5($str);
  51. }
  52. public function redirect($order) {
  53. $re = $this->check($order);
  54. return $re;
  55. }
  56. public function notify($order) {
  57. $re = $this->check($order);
  58. return $re;
  59. }
  60. function check($order) {
  61. $data = array();
  62. $data['apiName'] = $_POST["apiName"];
  63. // 通知时间
  64. $data['notifyTime'] = $_POST["notifyTime"];
  65. // 支付金额(单位元,显示用)
  66. $data['tradeAmt'] = $_POST["tradeAmt"];
  67. // 商户号
  68. $data['merchNo'] = $_POST["merchNo"];
  69. // 商户参数,支付平台返回商户上传的参数,可以为空
  70. $data['merchParam'] = $_POST["merchParam"];
  71. // 商户订单号
  72. $data['orderNo'] = $_POST["orderNo"];
  73. // 商户订单日期
  74. $data['tradeDate'] = $_POST["tradeDate"];
  75. // Mo宝支付订单号
  76. $data['accNo'] = $_POST["accNo"];
  77. // Mo宝支付账务日期
  78. $data['accDate'] = $_POST["accDate"];
  79. // 订单状态,0-未支付,1-支付成功,2-失败,4-部分退款,5-退款,9-退款处理中
  80. $data['orderStatus'] = $_POST["orderStatus"];
  81. $this->dataAccess->orderSn = $data['orderNo'];
  82. $this->dataAccess->money = $data['tradeAmt'];
  83. // 准备准备验签数据
  84. $sign = $this->md5mcrypt($data, $this->sellerInfo['busKey']);
  85. $data['sign'] = $_POST['signMsg'];
  86. if ($sign == $data['sign']) {
  87. if ('1' == $_POST["orderStatus"]) {
  88. return 1;
  89. }
  90. return 0;
  91. } else {
  92. // 签名验证失败
  93. return 0;
  94. }
  95. }
  96. //摩宝支持支付方式
  97. public function getPaymentType() {
  98. return array(
  99. "alipay" => "4", //支付宝扫描,
  100. "weixin" => "5", //微信扫码,
  101. );
  102. }
  103. //摩宝支持银行及其对应代码
  104. public function getPayBankCode() {
  105. return array(
  106. 'ICBC' => '工行',
  107. 'ABC' => '农行',
  108. 'BOC' => '中行',
  109. 'CCB' => '建行',
  110. 'COMM' => '交行',
  111. 'CMB' => '招行',
  112. 'SPDB' => '浦发',
  113. 'CIB' => '兴业',
  114. 'CMBC' => '民生',
  115. 'GDB' => '广发',
  116. 'CNCB' => '中信',
  117. 'CEB' => '光大',
  118. 'HXB' => '华夏',
  119. 'PSBC' => '邮储',
  120. 'PAB' => '平安',
  121. );
  122. }
  123. function notifyMsg($key) {
  124. if ($key > 0) {
  125. echo 'SUCCESS';
  126. } else {
  127. echo '';
  128. }
  129. }
  130. }
  131. ?>