QuickPayFunction.php 3.4 KB

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