1、微信公众号、微信小程序开发过程中,第三方服务器与微信服务器数据交互,需要进行数据转换,必须用到这两个函数:
分别是xml_to_array、array_to_xml ;
/** * 输出xml字符(数组转换成xml) * @param $params 参数名称 * return string 返回组装的xml **/ public function array_to_xml( $params ){ if(!is_array($params)|| count($params) <= 0) { return false; } $xml = ""; foreach ($params as $key=>$val) { if (is_numeric($val)){ $xml.="<".$key.">".$val."$key.">"; }else{ $xml.="<".$key.">$val."]]>$key.">"; } } $xml.=""; return $xml; } /** * 将xml转为array * @param string $xml * return array */ public function xml_to_array($xml){ if(!$xml){ return false; } //将XML转为array //禁止引用外部xml实体 libxml_disable_entity_loader(true); $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $data; }
2、拼接参数,将数组转换成键值对形式的字符串:key=value&k=v
/** * 将参数拼接为url: key=value&key=value * @param $params * @return string */ public function ToUrlParams( $params ){ $string = ''; if( !empty($params) ){ $array = array(); foreach( $params as $key => $value ){ $array[] = $key.'='.$value; } $string = implode("&",$array); } return $string; }
3、微信小程序生成签名,makeSign($params,$KEY),第一个参数是微信官方文档需要的参数;第二个参数是 申请微信支付获得的KEY
/** * 生成签名, $KEY就是支付key * @return 签名 */ public function MakeSign( $params,$KEY){ //签名步骤一:按字典序排序数组参数 ksort($params); $string = $this->ToUrlParams($params); //参数进行拼接key=value&k=v //签名步骤二:在string后加入KEY $string = $string . "&key=".$KEY; //签名步骤三:MD5加密 $string = md5($string); //签名步骤四:所有字符转为大写 $result = strtoupper($string); return $result; }
4、微信小程序的签名,总共需要三次;期中前两次是必须的,最后一次尽量加上
4.1 第一次是【统一下单】,将所有需要的信息进行生成签名,包括:
$data['nonceStr'] = $nonce_str;
$data['paySign'] = $this->MakeSign($tmp,$KEY);