Trimepay.php 3.5 KB

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