Wxcommon.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace weixin;
  3. /**
  4. * @title : 微信接口相关公共方法
  5. * @desc :
  6. * @Author : FastPHP
  7. * @Date : 2023-04-06 19:06:59
  8. */
  9. class Wxcommon
  10. {
  11. /**
  12. * @title: 生成数据签名处理 SHA1
  13. * @desc: 描述
  14. * @param {array} {arr} {} {待签名数据}
  15. * @return {*}
  16. * @author: FastPHP
  17. * @method: POST
  18. * @Date: 2023-04-06 19:14:16
  19. */
  20. static public function MakeSign_SHA1($arr)
  21. {
  22. ksort($arr); //签名步骤一:按字典序排序参数
  23. $string =self::ToUrlParams($arr);
  24. $string = sha1($string); //签名步骤三:sha1加密
  25. return $string;
  26. }
  27. /**
  28. * @title: 生成数据签名处理 MD5
  29. * @desc: 描述
  30. * @param {array} {arr} {} {待签名数据}
  31. * @param {string} {KEY} {} {加密秘钥}
  32. * @return {*}
  33. * @author: FastPHP
  34. * @method: POST
  35. * @Date: 2023-04-06 19:14:58
  36. */
  37. static public function MakeSign_MD5($arr,$KEY)
  38. {
  39. ksort($arr); //签名步骤一:按字典序排序参数
  40. $string = self::ToUrlParams($arr);
  41. $string = $string . "&key=".$KEY; //签名步骤二:在string后加入KEY
  42. $string = md5($string); //签名步骤三:MD5加密
  43. $result = strtoupper($string); //签名步骤四:所有字符转为大写
  44. return $result;
  45. }
  46. /**
  47. * @title: 格式化参数格式化成url参数
  48. * @desc: 描述
  49. * @param {array} {arr} {} {待格式化的数据}
  50. * @return {*}
  51. * @author: FastPHP
  52. * @method: POST
  53. * @Date: 2023-04-06 19:15:49
  54. */
  55. static function ToUrlParams($arr)
  56. {
  57. $buff = "";
  58. foreach ($arr as $k => $v)
  59. {
  60. if($k != "sign" && $v != "" && !is_array($v)){
  61. $buff .= $k . "=" . $v . "&";
  62. }
  63. }
  64. $buff = trim($buff, "&");
  65. return $buff;
  66. }
  67. /**
  68. * @title: 数组转换成Xml数据
  69. * @desc: 描述
  70. * @param {array} {arr} {} {待转换的数据}
  71. * @return {*}
  72. * @author: FastPHP
  73. * @method: POST
  74. * @Date: 2023-04-06 19:17:05
  75. */
  76. static public function ToXml($arr)
  77. {
  78. $xml = "<xml>";
  79. foreach ($arr as $key=>$val){
  80. if (is_numeric($val)){
  81. $xml.="<".$key.">".$val."</".$key.">";
  82. }else{
  83. $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
  84. }
  85. }
  86. $xml.="</xml>";
  87. return $xml;
  88. }
  89. /**
  90. * @title: 以post方式提交xml数据到对应的接口url
  91. * @desc: 描述
  92. * @param {string} {xml} {} {XML数据}
  93. * @param {string} {url} {} {待提交的数据}
  94. * @param {string} {SSLCERT} {} {SSL证书}
  95. * @param {string} {SSLKEY} {} {SSL秘钥}
  96. * @return {*}
  97. * @author: Rock
  98. * @method: POST
  99. * @Date: 2023-04-06 19:17:40
  100. */
  101. static public function postXmlCurl($xml, $url, $SSLCERT ="",$SSLKEY="")
  102. {
  103. $ch = curl_init();
  104. curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时
  105. curl_setopt($ch,CURLOPT_URL, $url);
  106. curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
  107. curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //严格校验
  108. curl_setopt($ch, CURLOPT_HEADER, FALSE); //设置header
  109. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //要求结果为字符串且输出到屏幕上
  110. //证书不为空开始设置证书
  111. if($SSLCERT !="" and $SSLKEY!=""){
  112. curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
  113. curl_setopt($ch,CURLOPT_SSLCERT,$SSLCERT);
  114. curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
  115. curl_setopt($ch,CURLOPT_SSLKEY,$SSLKEY);
  116. }
  117. curl_setopt($ch, CURLOPT_POST, TRUE); //post提交方式
  118. curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  119. $data = curl_exec($ch); //运行curl
  120. if($data){
  121. curl_close($ch);
  122. return $data;
  123. } else {
  124. $error = curl_errno($ch);
  125. curl_close($ch);
  126. WLog('WxCURL',"WxCURL出错,错误码:$error");
  127. }
  128. }
  129. }
  130. ?>