QuickPayFunction.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace App\Controllers;
  3. class QuickPayFunction
  4. {
  5. public function md5Verify($p1, $p2, $p3, $p4, $sign)
  6. {
  7. $preStr = $p1 . $p2 . $p3 . $p4 . "yft";
  8. $mySign = md5($preStr);
  9. if ($mySign == $sign) {
  10. return true;
  11. } else {
  12. return false;
  13. }
  14. }
  15. /**
  16. * 建立请求,以表单HTML形式构造(默认)
  17. * @param $para_temp 请求参数数组
  18. *
  19. */
  20. public function buildRequestForm($para_temp, $ss_order_no, $pay_config)
  21. {
  22. //待请求参数数组
  23. $para = QuickPayFunction::buildRequestPara($para_temp);
  24. $sHtml = "<form id='paysubmit' name='paysubmit' action='https://pay.anypay.me/pay/subOrder/zfb' accept-charset='utf-8' method='POST'>";
  25. while (list ($key, $val) = each($para)) {
  26. $sHtml .= "<input type='hidden' name='" . $key . "' value='" . $val . "'/>";
  27. }
  28. if ($pay_config->pay_config["type"] == "aliPay") {
  29. $sHtml .= "<input type='hidden' name='subject' value='余额充值'/>";
  30. } else {
  31. $sHtml .= "<input type='hidden' name='trade_no' value='" . $ss_order_no . "'/>";
  32. }
  33. //submit按钮控件请不要含有name属性
  34. $sHtml = $sHtml . "</form>";
  35. $sHtml = $sHtml . "<script>document.forms['paysubmit'].submit();</script>";
  36. return $sHtml;
  37. }
  38. /**
  39. * 生成要请求给云通付的参数数组
  40. * @param $para_temp 请求前的参数数组
  41. * @return 要请求的参数数组
  42. */
  43. static function buildRequestPara($para_temp)
  44. {
  45. //除去待签名参数数组中的空值和签名参数
  46. $para_filter = QuickPayFunction::paraFilter($para_temp);
  47. //生成签名结果
  48. $mysign = QuickPayFunction::buildRequestMysign($para_filter);
  49. //签名结果与签名方式加入请求提交参数组中
  50. $para_filter['sign'] = $mysign;
  51. return $para_filter;
  52. }
  53. /**
  54. * 除去数组中的空值和签名参数
  55. * @param $para 签名参数组
  56. * return 去掉空值与签名参数后的新签名参数组
  57. */
  58. static function paraFilter($para)
  59. {
  60. $para_filter = array();
  61. while (list ($key, $val) = each($para)) {
  62. if ($key == "sign" || $val == "") continue;
  63. else $para_filter[$key] = $para[$key];
  64. }
  65. return $para_filter;
  66. }
  67. /**
  68. * 生成签名结果
  69. * @param $para_filter 要签名的数组
  70. * return 签名结果字符串
  71. */
  72. static function buildRequestMysign($para_filter)
  73. {
  74. //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  75. $prestr = QuickPayFunction::createLinkstring($para_filter);
  76. $mysign = MD5($prestr);
  77. return $mysign;
  78. }
  79. static function md5Sign($prestr)
  80. {
  81. return md5($prestr);
  82. }
  83. /**
  84. * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  85. * @param $para 需要拼接的数组
  86. * return 拼接完成以后的字符串
  87. */
  88. static function createLinkstring($para)
  89. {
  90. $arg = "";
  91. while (list ($key, $val) = each($para)) {
  92. $arg .= $key . "=" . $val . "&";
  93. }
  94. //去掉最后一个&字符
  95. $arg = substr($arg, 0, count($arg) - 2);
  96. //如果存在转义字符,那么去掉转义
  97. if (get_magic_quotes_gpc()) {
  98. $arg = stripslashes($arg);
  99. }
  100. return $arg;
  101. }
  102. }