PbootCms对接虎皮椒支付封装类分享
虎皮椒支付是为微信个人和支付宝个人账户,提供个人收款API支付接口,不挂机,无需提现,官方清算。
2.namespace corehupijiao;
3.class Hupijiao{
4.
5. private $app_id;
6. private $app_secret;
7.
8. //支付请求地址
9. private $url;
10. private $api_url;
11. private $api_url_native;
12.
13. public function __construct() {
14. $this->app_id = '*************';
15. $this->app_secret = '**************************';
16. $this->api_url = 'https://api.xunhupay.com/payment';
17. $this->api_url_native = $this->api_url . '/do.html';
18. }
19.
20. public function getSecret(){
21. return $this->app_secret;
22. }
23.
24. public function payment(array $data,$type='wx_native'){
25. if(!$data){
26. exit('Please pass in the correct request parameters!');
27. }
28. $data=$this->formatData($data);
29. if($type=='wx_native'){
30. $this->url=$this->api_url_native;
31. }
32. $response = $this->httpRequest($this->url,$data);
33. $result = $response?json_decode($response,true):null;
34. $hash = $this->generate_xh_hash($result,$this->app_secret);
35. if(!isset( $result['hash'])|| $hash!=$result['hash']){
36. exit('Invalid sign! 40029');
37. }
38. if($result['errcode']!=0){
39. exit('errmsg:'.$result['errmsg'].', errcode:'.$result['errcode']);
40. }
41. return $result;
42. }
43.
44. public function formatData($data){
45. if(!$data){
46. exit('Please pass in the request data!');
47. }
48. if(!isset($data['appid'])){
49. $data['appid']=$this->app_id;
50. }
51. $data['hash']=$this->generate_xh_hash($data, $this->app_secret);
52. //$data = json_encode($data);
53. return $data;
54. }
55.
56. public function httpRequest($url,$data){
57. if(!function_exists('curl_init')){
58. json(0,'php未安装curl组件');
59. //throw new Exception('php未安装curl组件',500);
60. }
61. $protocol = (! empty ( $_SERVER ['HTTPS'] ) && $_SERVER ['HTTPS'] !== 'off' || $_SERVER ['SERVER_PORT'] == 443) ? "https://" : "http://";
62. $siteurl= $protocol.$_SERVER['HTTP_HOST'];
63.
64. $ch = curl_init();
65. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
66. curl_setopt($ch,CURLOPT_URL, $url);
67. curl_setopt($ch,CURLOPT_REFERER,$siteurl);
68. curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
69. curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
70. curl_setopt($ch, CURLOPT_HEADER, FALSE);
71. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
72. curl_setopt($ch, CURLOPT_POST, TRUE);
73. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
74. $response = curl_exec($ch);
75. $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
76. $error=curl_error($ch);
77. curl_close($ch);
78. if($httpStatusCode!=200){
79. json(0,$response);
80. //throw new Exception("invalid httpstatus:{$httpStatusCode} ,response:$response,detail_error:".$error,$httpStatusCode);
81. }
82. return $response;
83. }
84. public function isWebApp(){
85. if(!isset($_SERVER['HTTP_USER_AGENT'])){
86. return false;
87. }
88.
89. $u=strtolower($_SERVER['HTTP_USER_AGENT']);
90. if($u==null||strlen($u)==0){
91. return false;
92. }
93. preg_match('/(android|bbd+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap|windows ce|xda|xiino/',$u,$res);
94.
95. if($res&&count($res)>0){
96. return true;
97. }
98. if(strlen($u)<4){
99. return false;
100. }
101. preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/',substr($u,0,4),$res);
102. if($res&&count($res)>0){
103. return true;
104. }
105. $ipadchar = "/(ipad|ipad2)/i";
106. preg_match($ipadchar,$u,$res);
107. return $res&&count($res)>0;
108. }
109. public function generate_xh_hash(array $datas,$hashkey){
110. ksort($datas);
111. reset($datas);
112. $pre =array();
113. foreach ($datas as $key => $data){
114. if(is_null($data)||$data===''){continue;}
115. if($key=='hash'){
116. continue;
117. }
118. $pre[$key]=stripslashes($data);
119. }
120. $arg = '';
121. $qty = count($pre);
122. $index=0;
123. foreach ($pre as $key=>$val){
124. $arg.="$key=$val";
125. if($index++<($qty-1)){
126. $arg.="&";
127. }
128. }
129. return md5($arg.$hashkey);
130. }
131.
132. public function is_wechat_app(){
133. return strripos($_SERVER['HTTP_USER_AGENT'],'micromessenger');
134. }
135.}
如果您的问题还未解决可以联系站长付费协助。
有问题可以加入技术QQ群一起交流学习
本站vip会员 请加入无忧模板网 VIP群(50604020) PS:加入时备注用户名或昵称
普通注册会员或访客 请加入无忧模板网 技术交流群(50604130)
客服微信号:15898888535
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若内容侵犯了原著者的合法权益,可联系站长删除。