Trimepay.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace App\Components;
  3. class Trimepay
  4. {
  5. private $appId;
  6. private $appSecret;
  7. /**
  8. * 签名初始化
  9. *
  10. * @param string $appId appId
  11. * @param string $appSecret appSecret
  12. */
  13. public function __construct($appId, $appSecret)
  14. {
  15. $this->appId = $appId;
  16. $this->appSecret = $appSecret;
  17. //国内
  18. // $this->gatewayUri = 'https://api.ecy.es/gateway/pay/go';
  19. // $this->refundUri = 'https://api.ecy.es/gateway/refund/go';
  20. //国外
  21. $this->gatewayUri = 'https://api.trimepay.com/gateway/pay/go';
  22. $this->refundUri = 'https://api.trimepay.com/gateway/refund/go';
  23. }
  24. /**
  25. * 准备签名
  26. *
  27. * @param array $data 验签字符串
  28. *
  29. * @return string
  30. */
  31. public function prepareSign($data)
  32. {
  33. ksort($data);
  34. return http_build_query($data);
  35. }
  36. /**
  37. * 生成签名
  38. *
  39. * @param string $data 签名数据
  40. *
  41. * @return string
  42. */
  43. public function sign($data)
  44. {
  45. $signature = strtolower(md5(md5($data) . $this->appSecret));
  46. return $signature;
  47. }
  48. /**
  49. * 验证签名
  50. *
  51. * @param string $data 签名数据
  52. * @param string $signature 原数据
  53. *
  54. * @return bool
  55. */
  56. public function verify($data, $signature)
  57. {
  58. $mySign = $this->sign($data);
  59. if ($mySign === $signature) {
  60. return true;
  61. } else {
  62. return false;
  63. }
  64. }
  65. public function post($data, $url = '')
  66. {
  67. if ($url == '') {
  68. $url = $this->gatewayUri;
  69. }
  70. $curl = curl_init();
  71. curl_setopt($curl, CURLOPT_URL, $url);
  72. curl_setopt($curl, CURLOPT_HEADER, 0);
  73. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  74. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  75. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  76. curl_setopt($curl, CURLOPT_POST, 1);
  77. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  78. $data = curl_exec($curl);
  79. curl_close($curl);
  80. return json_decode($data, true);
  81. }
  82. public function pay($type, $tradeNo, $totalFee, $notifyUrl = '', $returnUrl = '')
  83. {
  84. $payData = [
  85. 'appId' => $this->appId,
  86. 'merchantTradeNo' => $tradeNo,
  87. 'totalFee' => $totalFee * 100,
  88. 'notifyUrl' => $notifyUrl,
  89. 'returnUrl' => $returnUrl,
  90. 'payType' => $type
  91. ];
  92. $signData = $this->prepareSign($payData);
  93. $payData['sign'] = $this->sign($signData);
  94. $response = $this->post($payData);
  95. return $response;
  96. }
  97. public function refund($merchantTradeNo)
  98. {
  99. $params['merchantTradeNo'] = $merchantTradeNo;
  100. $params['appId'] = $this->appId;
  101. $prepareSign = $this->prepareSign($params);
  102. $params['sign'] = $this->sign($prepareSign);
  103. return $this->post($params, $this->refundUri);
  104. }
  105. public function buildHtml($params, $method = 'post', $target = '_self')
  106. {
  107. // var_dump($params);exit;
  108. $html = "<form id='submit' name='submit' action='" . $this->gatewayUri . "' method='$method' target='$target'>";
  109. foreach ($params as $key => $value) {
  110. $html .= "<input type='hidden' name='$key' value='$value'/>";
  111. }
  112. $html .= "</form><script>document.forms['submit'].submit();</script>";
  113. return $html;
  114. }
  115. }