Allinpay.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. require('php_rsa.php');
  3. require('phpseclib/Crypt/RSA.php');
  4. require('phpseclib/File/X509.php');
  5. require('phpseclib/Math/BigInteger.php');
  6. class Allinpay {
  7. // 请求key密钥
  8. protected $merchantId;
  9. protected $merchantKey;
  10. private $x509;
  11. private $rsa;
  12. private $cert;
  13. private $pubkey;
  14. public function __construct($merchantId,$merchantKey){
  15. $this->merchantId = $merchantId;
  16. $this->merchantKey = $merchantKey;
  17. $this->x509 = new File_X509();
  18. $this->rsa = new Crypt_RSA();
  19. }
  20. public function rsa_Verify($bufSignSrc,$signMsg){
  21. $certfile = file_get_contents('TLCert-prod.cer');
  22. $cert = $this->x509->loadX509($certfile);
  23. $pubkey = $this->x509->getPublicKey();
  24. $this->rsa->loadKey($pubkey); // public key
  25. $this->rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
  26. $verifyResult = $this->rsa->verify($bufSignSrc, base64_decode(trim($signMsg)));
  27. return $verifyResult;
  28. }
  29. public function md5_Verify($bufSignSrc,$signMsg){
  30. $signMsg_a = strtoupper(md5($bufSignSrc.'&'));
  31. if($signMsg==$signMsg_a){
  32. $verifyResult = '';
  33. }
  34. return $verifyResult;
  35. }
  36. public function GetSign(array $query){
  37. $inputCharset = $query['inputCharset'];
  38. $pickupUrl = $query['pickupUrl'];
  39. $receiveUrl = $query['receiveUrl'];
  40. $version = $query['version'];
  41. $language = $query['language'];
  42. $signType = $query['signType'];
  43. $merchantId = $this->merchantId;
  44. $payerName = $query['payerName'];
  45. $payerEmail = $query['payerEmail'];
  46. $payerTelephone = $query['payerTelephone'];
  47. $pid = $query['pid'];
  48. $orderNo = $query['orderNo'];
  49. $orderAmount = $query['orderAmount'];
  50. $orderCurrency = $query['orderCurrency'];
  51. $orderDatetime = $query['orderDatetime'];
  52. $orderExpireDatetime = $query['orderExpireDatetime'];
  53. $productName = $query['productName'];
  54. $productPrice = $query['productPrice'];
  55. $productNum = $query['productNum'];
  56. $productId = $query['productId'];
  57. $productDesc = $query['productDesc'];
  58. $ext1 = $query['ext1'];
  59. $ext2 = $query['ext2'];
  60. $customsExt = $query['ext2'];
  61. $extTL = $query['extTL'];
  62. $payType = $query['payType'];
  63. $issuerId = $query['issuerId'];
  64. $pan = $query['pan'];
  65. $tradeNature = $query['tradeNature'];
  66. // 生成签名字符串。
  67. $bufSignSrc="";
  68. if($inputCharset != "")
  69. $bufSignSrc=$bufSignSrc."inputCharset=".$inputCharset."&";
  70. if($pickupUrl != "")
  71. $bufSignSrc=$bufSignSrc."pickupUrl=".$pickupUrl."&";
  72. if($receiveUrl != "")
  73. $bufSignSrc=$bufSignSrc."receiveUrl=".$receiveUrl."&";
  74. if($version != "")
  75. $bufSignSrc=$bufSignSrc."version=".$version."&";
  76. if($language != "")
  77. $bufSignSrc=$bufSignSrc."language=".$language."&";
  78. if($signType != "")
  79. $bufSignSrc=$bufSignSrc."signType=".$signType."&";
  80. if($merchantId != "")
  81. $bufSignSrc=$bufSignSrc."merchantId=".$this->merchantId."&";
  82. if($payerName != "")
  83. $bufSignSrc=$bufSignSrc."payerName=".$payerName."&";
  84. if($payerEmail != "")
  85. $bufSignSrc=$bufSignSrc."payerEmail=".$payerEmail."&";
  86. if($payerTelephone != "")
  87. $bufSignSrc=$bufSignSrc."payerTelephone=".$payerTelephone."&";
  88. if($pid != "")
  89. $bufSignSrc=$bufSignSrc."pid=".$pid."&";
  90. if($orderNo != "")
  91. $bufSignSrc=$bufSignSrc."orderNo=".$orderNo."&";
  92. if($orderAmount != "")
  93. $bufSignSrc=$bufSignSrc."orderAmount=".$orderAmount."&";
  94. if($orderCurrency != "")
  95. $bufSignSrc=$bufSignSrc."orderCurrency=".$orderCurrency."&";
  96. if($orderDatetime != "")
  97. $bufSignSrc=$bufSignSrc."orderDatetime=".$orderDatetime."&";
  98. if($orderExpireDatetime != "")
  99. $bufSignSrc=$bufSignSrc."orderExpireDatetime=".$orderExpireDatetime."&";
  100. if($productName != "")
  101. $bufSignSrc=$bufSignSrc."productName=".$productName."&";
  102. if($productPrice != "")
  103. $bufSignSrc=$bufSignSrc."productPrice=".$productPrice."&";
  104. if($productNum != "")
  105. $bufSignSrc=$bufSignSrc."productNum=".$productNum."&";
  106. if($productId != "")
  107. $bufSignSrc=$bufSignSrc."productId=".$productId."&";
  108. if($productDesc != "")
  109. $bufSignSrc=$bufSignSrc."productDesc=".$productDesc."&";
  110. if($ext1 != "")
  111. $bufSignSrc=$bufSignSrc."ext1=".$ext1."&";
  112. //如果海关扩展字段不为空,需要做个MD5填写到ext2里
  113. if($ext2 == "" && $customsExt != "")
  114. {
  115. $ext2 = strtoupper(md5($customsExt));
  116. $bufSignSrc=$bufSignSrc."ext2=".$ext2."&";
  117. }
  118. else if($ext2 != "")
  119. {
  120. $bufSignSrc=$bufSignSrc."ext2=".$ext2."&";
  121. }
  122. if($extTL != "")
  123. $bufSignSrc=$bufSignSrc."extTL".$extTL."&";
  124. if($payType != "")
  125. $bufSignSrc=$bufSignSrc."payType=".$payType."&";
  126. if($issuerId != "")
  127. $bufSignSrc=$bufSignSrc."issuerId=".$issuerId."&";
  128. if($pan != "")
  129. $bufSignSrc=$bufSignSrc."pan=".$pan."&";
  130. if($tradeNature != "")
  131. $bufSignSrc=$bufSignSrc."tradeNature=".$tradeNature."&";
  132. $bufSignSrc=$bufSignSrc."key=".$this->merchantKey; //key为MD5密钥,密钥是在通联支付网关商户服务网站上设置。
  133. //签名,设为signMsg字段值。
  134. $signMsg = strtoupper(md5($bufSignSrc));
  135. return $signMsg;
  136. }
  137. public function VerifySign(array $query){
  138. $merchantId=$query["merchantId"];
  139. $version=$query['version'];
  140. $language=$query['language'];
  141. $signType=$query['signType'];
  142. $payType=$query['payType'];
  143. $issuerId=$query['issuerId'];
  144. $paymentOrderId=$query['paymentOrderId'];
  145. $orderNo=$query['orderNo'];
  146. $orderDatetime=$query['orderDatetime'];
  147. $orderAmount=$query['orderAmount'];
  148. $payDatetime=$query['payDatetime'];
  149. $payAmount=$query['payAmount'];
  150. $ext1=$query['ext1'];
  151. $ext2=$query['ext2'];
  152. $payResult=$query['payResult'];
  153. $errorCode=$query['errorCode'];
  154. $returnDatetime=$query['returnDatetime'];
  155. $signMsg=$query["signMsg"];
  156. $bufSignSrc="";
  157. if($merchantId != "")
  158. $bufSignSrc=$bufSignSrc."merchantId=".$merchantId."&";
  159. if($version != "")
  160. $bufSignSrc=$bufSignSrc."version=".$version."&";
  161. if($language != "")
  162. $bufSignSrc=$bufSignSrc."language=".$language."&";
  163. if($signType != "")
  164. $bufSignSrc=$bufSignSrc."signType=".$signType."&";
  165. if($payType != "")
  166. $bufSignSrc=$bufSignSrc."payType=".$payType."&";
  167. if($issuerId != "")
  168. $bufSignSrc=$bufSignSrc."issuerId=".$issuerId."&";
  169. if($paymentOrderId != "")
  170. $bufSignSrc=$bufSignSrc."paymentOrderId=".$paymentOrderId."&";
  171. if($orderNo != "")
  172. $bufSignSrc=$bufSignSrc."orderNo=".$orderNo."&";
  173. if($orderDatetime != "")
  174. $bufSignSrc=$bufSignSrc."orderDatetime=".$orderDatetime."&";
  175. if($orderAmount != "")
  176. $bufSignSrc=$bufSignSrc."orderAmount=".$orderAmount."&";
  177. if($payDatetime != "")
  178. $bufSignSrc=$bufSignSrc."payDatetime=".$payDatetime."&";
  179. if($payAmount != "")
  180. $bufSignSrc=$bufSignSrc."payAmount=".$payAmount."&";
  181. if($ext1 != "")
  182. $bufSignSrc=$bufSignSrc."ext1=".$ext1."&";
  183. if($ext2 != "")
  184. $bufSignSrc=$bufSignSrc."ext2=".$ext2."&";
  185. if($payResult != "")
  186. $bufSignSrc=$bufSignSrc."payResult=".$payResult."&";
  187. if($errorCode != "")
  188. $bufSignSrc=$bufSignSrc."errorCode=".$errorCode."&";
  189. if($returnDatetime != "")
  190. $bufSignSrc=$bufSignSrc."returnDatetime=".$returnDatetime;
  191. return $bufSignSrc;
  192. }
  193. }