DinPayPayment.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Biz\Pay\Payment;
  3. /**
  4. * 智付接口
  5. */
  6. class DinPayPayment extends \Biz\Pay\BasePayment {
  7. function init() {
  8. $this->privateCertPath = '';
  9. $this->publicCertPath = '';
  10. $this->sellerInfo = array(
  11. 'busKey' => openssl_get_privatekey($this->privateCertPath),
  12. 'busAccount' => '987858', //
  13. );
  14. # code...
  15. }
  16. protected $getWay = "https://pay.dinpay.com/gateway?input_charset=UTF-8";
  17. protected $paymentName = "DinPay";
  18. function toPay() {
  19. $data = array(
  20. 'merchant_code' => $this->sellerInfo['busAccount'],
  21. 'service_type' => 'direct_pay',
  22. 'interface_version' => 'V3.0',
  23. 'input_charset' => 'UTF-8',
  24. 'notify_url' => $this->notifyUrl,
  25. 'order_no' => $this->dataAccess->orderSn,
  26. 'order_time' => date('Y-m-d H:i:s', time()), //
  27. 'order_amount' => $this->dataAccess->money, //
  28. 'product_name' => '在线充值支付', //
  29. 'bank_code' => '', //
  30. 'Return_url' => $this->redirectUrl, //
  31. 'pay_type' => 'b2c', //
  32. );
  33. $sign = $this->sslMcrypt($data, $this->sellerInfo['busKey']);
  34. $data['sign'] = $sign;
  35. $data['sign_type'] = 'RSA-S';
  36. $data = $this->goPay($data);
  37. }
  38. function sslMcrypt($data, $key) {
  39. $data = $this->fileterData($data);
  40. $str = http_build_query($data);
  41. $str = urldecode($str);
  42. openssl_sign($str, $sign_info, $key, OPENSSL_ALGO_MD5);
  43. $sign = base64_encode($sign_info);
  44. return $sign;
  45. }
  46. function sslcrypt($data, $sign, $key) {
  47. $data = $this->fileterData($data);
  48. $str = http_build_query($data);
  49. $str = urldecode($str);
  50. return openssl_verify($str, $sign, $key, OPENSSL_ALGO_MD5);
  51. }
  52. function fileterData($data) {
  53. if (is_array($data) && count($data) > 0) {
  54. ksort($data);
  55. foreach ($data as $k => $v) {
  56. if (empty($v)) {
  57. unset($data[$k]);
  58. }
  59. }
  60. }
  61. return $data;
  62. }
  63. public function notify($order) {
  64. # code...
  65. $re = $this->check($order);
  66. return $re;
  67. }
  68. public function redirect($order) {
  69. $re = $this->check($order);
  70. return $re;
  71. }
  72. public function check($order) {
  73. $data = array();
  74. $this->dataAccess->orderSn = $data['order_no'] = $_POST['order_no'];
  75. $data['order_time'] = $_POST['order_time'];
  76. $this->dataAccess->money = $data['order_amount'] = $_POST['order_amount'];
  77. $data['trade_no'] = $_POST['trade_no'];
  78. $data['trade_time'] = $_POST['trade_time'];
  79. $data['trade_status'] = $_POST['trade_status'];
  80. $data['notify_id'] = $_POST['notify_id'];
  81. $data['notify_type'] = $_POST['notify_type'];
  82. $data['interface_version'] = $_POST['interface_version'];
  83. $data['merchant_code'] = $_POST['merchant_code'];
  84. $sign = base64_decode($_POST["sign"]);
  85. $data['bank_seq_no'] = $_POST["bank_seq_no"];
  86. $data['extra_return_param'] = $_POST["extra_return_param"];
  87. // $data['sign_type'] = $_POST['sign_type'];
  88. if ($this->sslcrypt($data, $sign, openssl_get_publickey($this->publicCertPath), OPENSSL_ALGO_MD5)) {
  89. return 1;
  90. } else {
  91. return 0;
  92. }
  93. }
  94. function notifyMsg($key) {
  95. if ($key > 0) {
  96. echo 'SUCCESS';
  97. } else {
  98. echo '';
  99. }
  100. }
  101. public function getPaymentType() {
  102. # code...
  103. return array(
  104. );
  105. }
  106. }