微信扫码支付(模式1)订单查询php详解:

在微信(用户扫码)支付中第一种开发模式中,
当用户扫码之后,在公众号中填写回调url,我
们不用这个方法,直接进行查询订单即可知道用户是否知否,
下面讲解一下查询订单php方法:
在进行查询之前我们要必须知道4个参数:
$key ='212332132132132'//公众号在申请微信支付的时候需要你自己的一个密匙
$appid = 'xxxxxxx';//进行收钱的公众号的appid
$mchid = '11111111';//公众号申请微信支付的时候微信给你提供的商户号
$ordernumber='2111111'//当买家在你们商城中买东西时候产生的订单号
------------
万事俱备只欠东风。
-------------
生成一个随机数
$str ="";
$length = 32;
for ( $i = 0; $i < $length; $i++ )  {  
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);  

//随机字符串
$nonce_str = $str;//随机字符串


然后根据上面的所有的数据进行签名处理
    $arrayName = array('appid'=>$appid,'mch_id'=>$mchid,'out_trade_no'=>$ordernumber,'nonce_str'=>$nonce_str);
ksort($arrayName);
    $sign = '';
    foreach ($arrayName as $key => $value) {
    $sign.='&'.$key.'='.$value;
    }
    //进行拼凑
    //去掉开头的&并且进行MD5加密处理
    $stringSignTemp = ltrim($sign,'&');
    $stringSignTemp =  $stringSignTemp.'&key='.$key;
    $sign = md5($stringSignTemp);
    $sign = strtoupper($sign);
这个sign就是签名,在微信开发中签名是很重要的。走不通这个其他都是白费
---------------
然后进行拼接xml数据形式,并且进行查询处理:
 $xmldata = "<xml><appid>".$appid."</appid><mch_id>".$mchid."</mch_id><nonce_str>".$nonce_str."</nonce_str><out_trade_no>".$ordernumber."</out_trade_no><sign>".$sign."</sign></xml>";
    $url = "https://api.mch.weixin.qq.com/pay/orderquery";/公众号查询订单的接口
    $second = 30;
    //证书验证与否
    $useCert = true;
    $ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);

//如果有配置代理这里就设置代理
if(WxPayConfig::getValue('curl_proxy_host') != "0.0.0.0" 
&& WxPayConfig::getValue('curl_proxy_port') != 0){
curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::getValue('curl_proxy_host'));
curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::getValue('curl_proxy_port'));
}
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);


if($useCert == true){
//设置证书
//使用证书:cert 与 key 分别属于两个.pem文件
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::getValue('sslcert_path'));
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::getValue('sslkey_path'));
}
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata);
//运行curl
$xml = curl_exec($ch);
//返回结果
if($xml){
curl_close($ch);
//把xml转化成数组
libxml_disable_entity_loader(true); 
$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
$arr = json_decode(json_encode($xmlstring),true); 
if (isset($arr['trade_state']) && $arr['trade_state'] == 'SUCCESS') {
//到这步说明已经查询到订单成功,也就是说明用户已经付款了
}
}else{ 
$error = curl_errno($ch);
curl_close($ch);
throw new WxPayException("curl出错,错误码:$error");

}


//curl部分不要照抄我的,我的是我的环境才那样写的你要用你的curl写才行根据你的环境




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gjanuary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值