demo.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. $keypri = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC95Mqn1Q9bTF0H
  3. ncQOXRCsP10I6U7f83OX2+8WMxMr30J8AX6QxU3sWRY/eDMPmnnSifsG6n1ZsgJQ
  4. DaN8CRFjsGGA6E0Fglphf0A22MkuTsyQRSAnhmQCQbjFetdrLUBGcwXzX9H1uLhe
  5. F8opCjK3YdnnIYfadlq5Y8Ogw5RsmjX7sRN2l6hvONPlrN5qKd0GjGbttfYrNgxt
  6. D7Upbr+MVZ//RoeN3DfGSmdPQjEMVrbnHaNp92hxdVTo2t0ZlqpsICJlDF8lFzFv
  7. 0DVmn0tsR1rlCjmASy0LRLrIQJhp4ojhl2Jew8zx/XUEWQpyjsBGXETh4zeHXURa
  8. Cw8NsofrAgMBAAECggEAQirawqhm9XUiZWj/y9F54csia9x/82EtQhkMsjuRzpO4
  9. 4uTSaTeW82gHbI5BnIpDMK2LntlOXFa+n45hDPNL7+Sh1P0c+XJ2c8qXYYUgdNZY
  10. SV0M2zjk2DR2YblwHpRh9SpXRHp6+pgnBgJcGvjGu0eJWhRA9kqPSlIM9JOxwDVR
  11. 2RUn52VFmLqwe/QY3RlMTBS6lHxZqo8qwok+BsHAD79o5EDVKj64tvCD6Ew3WzZi
  12. NySctdRKt+GN/l4IWgwzll8dkMEZbqMhB6Kb4KAU0Bkzdqz539Q5CapNsYTTHW+j
  13. VbCq8LwhMyAkpUgWyjCxUNH6c6+AoApstKeMjiQoAQKBgQDskD6WPaAhxZcAFqDL
  14. Ei03LUmuypl4djuKJVWYdxPxTr3icAqd/gRfLojWRMT/5Ql/E62L0E/5uHa/Tx9P
  15. 9A0lej8CS1NHrtE8JtXPjUF5jv+yNr7QyZkDF2tIBkSr5hMFBtSRBbsDYsRDPalB
  16. yHJ2XPdIOBoplzIcDxW2F921AQKBgQDNfutqYgdMkgrVH9hRv+e8bu4S1n08HbgJ
  17. /wn37TvsT/vRyWs/we6umkDia0zm0BDBeN8IGj+HVrLqcQQqAFADo1ToI8hQMH5f
  18. WVlsIq7JkRJY6MNPGaM40ZkQJ0C0H7GNZBDKP0LKX/2DU6j3loVEpfX3tkY0Gnb5
  19. 2Ox0kE1g6wKBgF/I6A6dVUFXaBS5FNIkwfoddEA5+Ho2JVWCWG4riP+kCm6tPx9J
  20. wytnBDD+F2YlrvqtVQ/PgRJ0BmDgAKW3A7uxC+I57baQqlfYwaoQX/qAVDgswoZ3
  21. mmUODnpTT2rq9biLU3aFA3wTebRgOzBPoUkby2SKks1UUw3ZbckVUMgBAoGBALPw
  22. EN+kWtPXhZi9O8PJkHdVgy4Hlr2PIFnQcsAfgTsZhl1aS4kWnZNSCsK4RixNwH5J
  23. ArKrmTk+14el0omcoHOvD2f9/ScKb326VSz06awiVbh4iJy4zE2yap7UYDnZDrXK
  24. C1GtNyTSDMBz/x5dNPC5ibmQZ8Sz774zDkm7GaZlAoGBAMnbSMMXs+wuTCo4LI38
  25. hHANp5Ry8xUPzWyQ8N0XkF9PvUz/dnr/b+SRB2y4Xe5w2YGPp4OKBWRMJMjG2Pby
  26. 8+lPXS6OalWyzsdPVuDEMbM5D54FmVlMIjvi1vTzsaYiHqoTydivaet/F87Dghpa
  27. U6MhZnBh1032L8aFVcn3q7fj";
  28. //$keypub = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNPjXFdfaE76b/dYvE3HTflIulBliyCVhSNss9mcl6xXOTjpRPKP2Bprl/lrMTog0twNbfXyLpsVQY5dXKqlwVfJfYdTAbUU8z4WOjkaE22OQ1dB0Usa2Z+ySb0QG3dNhO/dMWei1e4RhWX8Hh9I585m+2XBbZXxPnISqwVXRIiNST+68Dv9uvbXLREDaWAA7HG/ArqYFW/l+thceEHtNAfc/W770udlUZ4kwle6//D//9AZYNxugiD8pkP7ok7HKluIbVN8nDEgGbbWZdXlZ+EDffVpRw83YZfUyd9lYpBAG/EMY/zepXpEkmx+E59I/uTmh4N4VMAjI+Krp3gQ/QIDAQAB";
  29. $keypub = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp7+ID0TR1iN/5YUWkSzh
  30. 8fG3+e+kj9gWbkU5j8jkGqG0fXE7uhKvhuPeUOvuAnVtUw8VKI6GssfFUafs0rMT
  31. 4No/s8wF7AzndyD/YoqpCqe5xToPNVHZ+5JHa9K92alTvvcx1ukRfJp1SI0JHXg1
  32. goUhfUrLOXV2QSgoshBHUTocWuIY4CdKP1tVOelBMcwItY9KBujfs7WMUFibe6gg
  33. 5V+KqYoK0uhpvZmFb9IHCGdujVdPGxL0tPH/hGBNrbgm1gOBubB9yEnH3hTj9gGg
  34. arcELZGyRi9HQU0haG3c79f4XDvirSTsnHnd7aIM9BKPdlkq8QZANGyuO7Rs1zkF
  35. CwIDAQAB";
  36. $params = [
  37. "service"=>"App.Order.Pay",
  38. "timestamp"=>date('Y-m-d H:i:s'),
  39. "nonce"=>time(),
  40. "member_id"=>"220431411",
  41. "mem_order"=>"2205947".time(),
  42. "bank_code"=>"953",
  43. "notifyurl"=>"https://".$_SERVER['SERVER_NAME']."/api/Pay/alipayOrderNotify",
  44. "callbackurl"=>"https://".$_SERVER['SERVER_NAME']."/pages/mine/order-list?num=1",
  45. "amount"=>"5.00",
  46. "productname"=>"MEME世界商品",
  47. "attach"=>""
  48. ];
  49. $apiKey = "4n79o0izlo0ax9z45lopjj0hgwl249bk";//商户中心的APIKEY
  50. ksort($params);
  51. $signString = "";
  52. foreach($params as $key => $val){
  53. $signString .= $val;
  54. }
  55. $signString .= $apiKey;
  56. $params['sign'] = strtoupper(md5($signString));
  57. var_dump($params);
  58. //var_dump($params);
  59. //到这里签名完成
  60. //对notifyurl进行rsa加密
  61. $params['notifyurl'] = sslEn($params['notifyurl'],$keypri);//$key是商户私钥
  62. var_dump($params);
  63. //最后POST提交 $params
  64. $url = "https://apis.wqkeji.cn";
  65. $re = httpPost($url,$params);//提交返回
  66. //判断是否为数组
  67. $re = is_array($re)?$re:json_decode($re,true);
  68. print_r($re);die;
  69. //对data进行平台公钥解密
  70. $data = sslDe($re['data'],$keypub);
  71. var_dump($data);
  72. /**
  73. * RSA 私钥、公钥加密
  74. * @param $data
  75. * @param $key
  76. * @param $type
  77. * @return string
  78. */
  79. function sslEn($data, $key, $type = 'pi')
  80. {
  81. $encrypted = "";
  82. if ($type == 'pi') {
  83. $r = openssl_pkey_get_private($key);
  84. //私钥加密
  85. foreach (str_split($data, 117) as $chunk) {
  86. openssl_private_encrypt($chunk, $encryptData, $key);
  87. $encrypted .= $encryptData;
  88. }
  89. } elseif ($type == 'pu') {
  90. $r = openssl_pkey_get_public($key);
  91. //公钥加密
  92. foreach (str_split($data, 117) as $chunk) {
  93. openssl_public_encrypt($chunk, $encryptData, $key);
  94. $encrypted .= $encryptData;
  95. }
  96. }
  97. $encrypt_data = base64_encode($encrypted);
  98. return $encrypt_data;
  99. }
  100. /**
  101. * RSA 私钥、公钥解密
  102. * @param $data
  103. * @param $key
  104. * @param $type
  105. * @return string
  106. */
  107. function sslDe($data, $key, $type = 'pu')
  108. {
  109. $hex_encrypt_data = trim($data);
  110. $encrypt_data = base64_decode($hex_encrypt_data);//对BASE64进行转换
  111. $decrypted = "";
  112. if ($type == 'pu') {
  113. $r = openssl_pkey_get_public($key);
  114. //公钥解密
  115. $arrThrunk = str_split($encrypt_data, 256);
  116. foreach ($arrThrunk as $trunk) {
  117. $temp = '';
  118. if (openssl_public_decrypt($trunk, $temp, $key)) {
  119. $decrypted .= $temp;
  120. } else {
  121. return '';
  122. }
  123. }
  124. } elseif ($type == 'pi') {
  125. $r = openssl_pkey_get_private($key);
  126. //私钥解密 ---- 分段解密
  127. $arrThrunk = str_split($encrypt_data, 256);
  128. foreach ($arrThrunk as $trunk) {
  129. $temp = '';
  130. if (openssl_private_decrypt($trunk, $temp, $key)) {
  131. $decrypted .= $temp;
  132. } else {
  133. return '';
  134. }
  135. }
  136. }
  137. return $decrypted;
  138. }
  139. //HTTP post 工具
  140. function httpPost($url, $post_data)
  141. {
  142. // 模拟提交数据函数
  143. $curl = curl_init(); // 启动一个CURL会话
  144. curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
  145. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
  146. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
  147. if (isset($_SERVER['HTTP_USER_AGENT'])) {
  148. curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
  149. }
  150. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  151. curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  152. if (!empty($post_data)) {
  153. curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data)); // Post提交的数据包
  154. }
  155. curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
  156. curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
  157. curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  158. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  159. // 发出请求
  160. $response = curl_exec($curl);
  161. curl_close($curl); // 关闭CURL会话
  162. return $response;
  163. }
  164. ?>