AllinPay.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace App\Libs\Pay\Merchants;
  3. use App\Libs\PayClient;
  4. use GuzzleHttp\Client;
  5. use Log;
  6. /**
  7. 通联支付
  8. @author zhoulj
  9. */
  10. class AllinPay {
  11. /*
  12. const APPID = '00014994';
  13. const CUSID = '514331048163570';
  14. const APPKEY = 'zhuishuyun2017#123';
  15. const APIURL = "https://vsp.allinpay.com/apiweb/unitorder";//生产环境
  16. const APIVERSION = '11';
  17. */
  18. private $appid ;
  19. private $cusid;
  20. public $appkey;
  21. private $api_url;
  22. private $api_version;
  23. /*
  24. const APPID = '00015244';
  25. const CUSID = '515331048168685';
  26. const APPKEY = 'zhuishuyun2017#124';
  27. const APIURL = "https://vsp.allinpay.com/apiweb/unitorder";//生产环境
  28. const APIVERSION = '11';
  29. */
  30. public $PayClient;
  31. function __construct($config)
  32. {
  33. $this->appid = $config['appid'];
  34. $this->cusid = $config['cusid'];
  35. $this->appkey = $config['appkey'];
  36. $this->api_url = $config['api_url'];
  37. $this->api_version = $config['api_version'];
  38. //$this->PayClient = new PayClient(self::APIURL,20);
  39. $this->PayClient = new PayClient($this->api_url,10);
  40. }
  41. //订单发送
  42. function send($data)
  43. {
  44. $data = [
  45. 'cusid'=>$this->cusid,
  46. 'appid'=>$this->appid,
  47. 'version'=>$this->api_version,
  48. 'trxamt'=>$data['price'],
  49. 'reqsn'=>$data['trade_no'],
  50. 'paytype'=>'W02',
  51. 'randomstr'=>md5(time()),
  52. 'body'=>$data['body'],
  53. 'remark'=>$data['remark'],
  54. 'acct'=>$data['openid'],
  55. 'notify_url'=>env('ALLINPAY_PAY_NOFITY_URL'),
  56. ];
  57. Log::info('allinpay_client_request_data');
  58. Log::info($data);
  59. $data['sign'] = $this->SignArray($data,$this->appkey);//签名;
  60. $response = $this->PayClient->get($this->api_url."/pay",$data);
  61. return $this->getPayInfo($response);
  62. }
  63. //验签
  64. function validSign($array){
  65. if("SUCCESS"==$array["retcode"]){
  66. $signRsp = strtolower($array["sign"]);
  67. $array["sign"] = "";
  68. $sign = strtolower($this->SignArray($array, $this->appkey));
  69. if($sign==$signRsp){
  70. return TRUE;
  71. }
  72. else {
  73. echo "验签失败:".$signRsp."--".$sign;
  74. }
  75. }
  76. else{
  77. echo $array["retmsg"];
  78. }
  79. return FALSE;
  80. }
  81. /**
  82. * 校验签名
  83. */
  84. public function NotifyValidSign(array $array,$appkey){
  85. $sign = $array['sign'];
  86. unset($array['sign']);
  87. //$array['key'] = $appkey;
  88. $mySign = $this->SignArray($array, $appkey);
  89. return strtolower($sign) == strtolower($mySign);
  90. }
  91. /**
  92. * 将参数数组签名
  93. */
  94. public function SignArray(array $array,$appkey){
  95. $array['key'] = $appkey;// 将key放到数组中一起进行排序和组装
  96. ksort($array);
  97. $blankStr = $this->ToUrlParams($array);
  98. $sign = md5($blankStr);
  99. return $sign;
  100. }
  101. public function ToUrlParams(array $array)
  102. {
  103. $buff = "";
  104. foreach ($array as $k => $v)
  105. {
  106. if($v != "" && !is_array($v)){
  107. $buff .= $k . "=" . $v . "&";
  108. }
  109. }
  110. $buff = trim($buff, "&");
  111. return $buff;
  112. }
  113. function getPayInfo($response)
  114. {
  115. Log::info($response);
  116. if($this->validSign($response)){
  117. Log::info('valid_success2');
  118. if(isset($response['payinfo'])){
  119. $payinfo = $response['payinfo'];
  120. Log::info($payinfo);
  121. $payinfo = json_decode($payinfo,true);
  122. Log::info($payinfo);
  123. return $payinfo;
  124. }else{
  125. return $response;
  126. }
  127. }else{
  128. Log::info('valid_fail');
  129. return null;
  130. }
  131. }
  132. }