当前位置: 首页 > 后端技术 > PHP

php微信公众号支付

时间:2023-03-30 02:06:13 PHP

appid;$postData['mch_id']=$this->mchid;$postData['nonce_str']=$this->createNoncestr();$postData['body']=$params['body']?$params['body']:'jsapi支付';$postData['out_trade_no']=$params['out_trade_no'];$postData['total_fee']=$params['total_fee'];$postData["spbill_create_ip"]=$_SERVER["REMOTE_ADDR"];$postData['notify_url']=$params['notify_url'];$postData['trade_type']='JSAPI';$postData['openid']=$params['openid'];$postData["sign"]=$this->createSign($postData);//把数组转换成xml格式$xmlData=$this->arrayToXml($postData);$resXml=$this->curl_post('https://api.mch.weixin.qq.com/pay/unifiedorder',$xmlData);$resData=json_decode(json_encode(simplexml_load_string($resXml,'SimpleXMLElement',LIBXML_NOCDATA)),true);如果($resData['return_code']!='成功'||$resData['result_code']!='SUCCESS')返回假;//生成正式支付参数$data=array('appId'=>$resData['appid'],'nonceStr'=>$resData['nonce_str'],'package'=>"prepay_id=".$resData['prepay_id'],'signType'=>'MD5','timeStamp'=>time(),);//支付签名$data['paySign']=$this->createSign($data);return$data;}//生成签名privatefunctioncreateSign($params){//签名步骤一:按字典顺序对参数进行排序ksort($params);$String=$this->formatBizQueryParaMap($params,false);//签名第2步:在字符串后添加KEY$String=$String."&key=".$this->key;//签名步骤3:MD5加密$String=md5($String);//签名步骤4:将所有字符转换为大写$result_=strtoupper($String);return$result_;}//按字典顺序对参数进行排序privatefunctionformatBizQueryParaMap($params,$urlencode=false){ksort($params);$buff='';foreach($paramsas$key=>$val){$buff.=$key.“=”。$瓦尔。"&";}$reqPar=子str($buff,0,strlen($buff)-1);return$reqPar;}//将数组转为xml格式privatefunctionarrayToXml($arr){$xml="";foreach($arras$key=>$val){if(is_numeric($val))$xml.='<'.$键。'>'。$瓦尔。'';else$xml.="<".$key.">";}$xml.="";return$xml;}//随机字符串私有函数createNoncestr($length=32){$chars='abcdefghijklmnopqrstuvwxyz0123456789';$str='';for($i=0;$i<$length;$i++){$str.=substr($chars,mt_rand(0,strlen($chars)-1),1);}return$str;}}//调用$obj=newwxPay()$params=array();$params['out_trade_no']=date('YmdHis');$params['total_fee']=100;$params['notify_url']='http://www.xxx.com/mobile/notify.php';$params['openid']='ouD322auhn9o5m-8';$res=$obj->jsApiPay($params);?>如果一直报签名错误,可以先在签名工具中验证签名。如果签名工具中的签名校验无误,则很有可能是apikey的问题。新建商家后台,设置apikey,一般可以正常