alipay.class.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. // by 请勿倒卖,已申请软著,否则追究法律责任
  3. error_reporting(1);
  4. class AlipayService
  5. {
  6. protected $appId;
  7. protected $returnUrl;
  8. protected $notifyUrl;
  9. protected $charset;
  10. protected $signType;
  11. protected $privateKey;
  12. public function __construct($_var_0, $_var_1, $_var_2, $_var_3, $_var_4)
  13. {
  14. $this->appId = $_var_0;
  15. $this->returnUrl = $_var_1;
  16. $this->notifyUrl = $_var_2;
  17. $this->charset = "utf8";
  18. $this->signType = $_var_3;
  19. $this->privateKey = $_var_4;
  20. }
  21. public function doPay($totalFee, $outTradeNo, $orderName, $returnUrl, $notifyUrl, $wap = '')
  22. {
  23. $_var_5 = $wap ? "alipay.wap.create.direct.pay.by.user" : "create_direct_pay_by_user";
  24. $_var_6 = array("partner" => $this->appId, "service" => $_var_5, "_input_charset" => strtolower($this->charset), "sign_type" => strtoupper($this->signType), "return_url" => $returnUrl, "notify_url" => $notifyUrl, "out_trade_no" => $outTradeNo, "total_fee" => $totalFee, "subject" => $orderName, "payment_type" => 1, "seller_id" => $this->appId);
  25. return $this->buildRequestForm($_var_6);
  26. }
  27. function buildRequestForm($para_temp)
  28. {
  29. $_var_7 = $this->buildRequestPara($para_temp);
  30. $_var_8 = "<form id='alipaysubmit' name='alipaysubmit' action='https://mapi.alipay.com/gateway.do?_input_charset=" . trim(strtolower($this->charset)) . "' method='post'>";
  31. while (list($_var_9, $_var_10) = each($_var_7)) {
  32. $_var_8 .= "<input type='hidden' name='" . $_var_9 . "' value='" . $_var_10 . "'/>";
  33. }
  34. $_var_8 = $_var_8 . "<input type='submit' value='提交' style='display:none;'></form>";
  35. $_var_8 = $_var_8 . "<script>document.forms['alipaysubmit'].submit();</script>";
  36. return $_var_8;
  37. }
  38. function buildRequestPara($para_temp)
  39. {
  40. $_var_11 = $this->paraFilter($para_temp);
  41. $_var_12 = $this->argSort($_var_11);
  42. $_var_13 = $this->buildRequestMysign($_var_12);
  43. $_var_12["sign"] = $_var_13;
  44. $_var_12["sign_type"] = strtoupper(trim($this->signType));
  45. return $_var_12;
  46. }
  47. function argSort($para)
  48. {
  49. ksort($para);
  50. reset($para);
  51. return $para;
  52. }
  53. private function buildRequestMysign($para_sort)
  54. {
  55. $_var_14 = $this->createLinkstring($para_sort);
  56. $_var_15 = "";
  57. switch (strtoupper(trim($this->signType))) {
  58. case "MD5":
  59. $_var_15 = $this->md5Sign($_var_14, $this->privateKey);
  60. break;
  61. case "RSA":
  62. default:
  63. $_var_15 = $this->rsaSign($_var_14, $this->privateKey);
  64. break;
  65. }
  66. return $_var_15;
  67. }
  68. private function rsaSign($_var_16, $_var_17)
  69. {
  70. $_var_17 = str_replace("-----BEGIN RSA PRIVATE KEY-----", "", $_var_17);
  71. $_var_17 = str_replace("-----END RSA PRIVATE KEY-----", "", $_var_17);
  72. $_var_17 = str_replace("\n", "", $_var_17);
  73. $_var_17 = "-----BEGIN RSA PRIVATE KEY-----" . PHP_EOL . wordwrap($_var_17, 64, "\n", true) . PHP_EOL . "-----END RSA PRIVATE KEY-----";
  74. $_var_18 = openssl_get_privatekey($_var_17);
  75. if ($_var_18) {
  76. openssl_sign($_var_16, $_var_19, $_var_18);
  77. } else {
  78. echo "您的私钥格式不正确!" . "<br/>" . "The format of your private_key is incorrect!";
  79. exit;
  80. }
  81. openssl_free_key($_var_18);
  82. $_var_19 = base64_encode($_var_19);
  83. return $_var_19;
  84. }
  85. function md5Sign($prestr, $key)
  86. {
  87. $prestr = $prestr . $key;
  88. return md5($prestr);
  89. }
  90. private function createLinkstring($para)
  91. {
  92. $_var_20 = "";
  93. while (list($_var_21, $_var_22) = each($para)) {
  94. $_var_20 .= $_var_21 . "=" . $_var_22 . "&";
  95. }
  96. $_var_20 = substr($_var_20, 0, count($_var_20) - 2);
  97. return $_var_20;
  98. }
  99. private function paraFilter($_var_23)
  100. {
  101. $_var_24 = array();
  102. while (list($_var_25, $_var_26) = each($_var_23)) {
  103. if ($_var_25 == "sign" || $_var_25 == "sign_type" || $_var_26 == "") {
  104. continue;
  105. } else {
  106. $_var_24[$_var_25] = $_var_23[$_var_25];
  107. }
  108. }
  109. return $_var_24;
  110. }
  111. function verifyNotify($data)
  112. {
  113. if (empty($data)) {
  114. return false;
  115. } else {
  116. $_var_27 = $this->paraFilter($data);
  117. $_var_28 = $this->argSort($_var_27);
  118. $_var_29 = $this->buildRequestMysign($_var_28);
  119. if ($_var_29 = $data["sign"]) {
  120. return true;
  121. } else {
  122. return false;
  123. }
  124. }
  125. }
  126. }