2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > PHP实现对小程序微信支付v2订单的结果查询

PHP实现对小程序微信支付v2订单的结果查询

时间:2022-02-28 02:43:09

相关推荐

PHP实现对小程序微信支付v2订单的结果查询

PS:本篇文章用于获取微信支付订单的查询,代码中使用的是out_trade_no:商户订单号来进行查询,可以直接将文中的out_trade_no替换为transaction_id微信支付订单号来进行查询,按照个人需求来就行,代码如下

小程序端js代码:

getData(){wx.request({url: 'http://127.0.0.1:2908/wxPayV2/queryOrder/actionQuery.php',method:'GET',header:{'content_type':'application/json'},data:{'out_trade_no':'此处写你的商户订单号' //如果写微信订单号记得将后面改为transaction_id},success(res){console.log(res)}})}

PHP相关的类的代码:

<?phprequire_once ('../../config/appConfig.php');class queryOrder{public $appid;public $mch_id;public $APIv2;/*** 获取基本配置相关信息*/public function __construct(){$appid = appid;$mch_id = mchID;$APIv2 = APIv2;$this -> appid = $appid;$this -> mch_id = $mch_id;$this -> APIv2 = $APIv2;}/*** @return string :返回32位随机字符串*/public function get_nonce_str(): string //此处可以写的更复杂些,为了篇幅我简单写一下{$body = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';$disposeData = str_shuffle($body);return substr($disposeData,0,32);}/*** 获取查询订单所需要的签名* @param $out_trade_no :微信支付订单号* @param $nonce_str :随机字符串* @return string*/public function getQuerySign($out_trade_no,$nonce_str): string{$signBody = array('appid' => $this -> appid,'mch_id' => $this -> mch_id,'out_trade_no' => $out_trade_no,'nonce_str' => $nonce_str,'sign_type' => 'MD5');ksort($signBody);$stringSignBody = http_build_query($signBody);$resultSignBody = $stringSignBody.'&key='.$this -> APIv2;$sign = strtoupper(MD5($resultSignBody));return $sign;}/*** 获取查询订单所需要的请求数据* @return false|string :返回查询订单所需要的xml格式数据* @throws DOMException*/public function queryOrderBody($out_trade_no,$nonce_str,$sign){$requestData = new DOMDocument;$requestData -> formatOutput = true;$xml = $requestData-> createElement('xml');$appid = $requestData -> createElement('appid',$this -> appid);$mch_id = $requestData -> createElement('mch_id',$this -> mch_id);$out_trade_no = $requestData -> createElement('out_trade_no',$out_trade_no);$nonce_str = $requestData -> createElement('nonce_str',$nonce_str);$sign = $requestData -> createElement('sign',$sign);$sign_type = $requestData -> createElement('sign_type','MD5');$requestData -> appendChild($xml);$xml -> appendChild($appid);$xml -> appendChild($mch_id);$xml -> appendChild($out_trade_no);$xml -> appendChild($nonce_str);$xml -> appendChild($sign);$xml -> appendChild($sign_type);$requestData -> save('./queryOrderBody.xml');return $requestData -> saveXML();}/*** curl请求接口* @return bool|string*/public function curlRequest($data){$url = 'https://api.mch./pay/orderquery';$getData = curl_init();curl_setopt($getData,CURLOPT_URL,$url);curl_setopt($getData,CURLOPT_RETURNTRANSFER,1);curl_setopt($getData,CURLOPT_SSL_VERIFYPEER,0);curl_setopt($getData,CURLOPT_SSL_VERIFYHOST,0);curl_setopt($getData,CURLOPT_POST,1);curl_setopt($getData,CURLOPT_POSTFIELDS,$data);curl_setopt($getData,CURLOPT_CONNECTTIMEOUT,60);curl_setopt($getData,CURLOPT_HEADER,0);$result = curl_exec($getData);curl_close($getData);return $result;}}

PHP类的方法调用

<?php/** 本PHP文件通过访问https://api.mch./pay/orderquery,提交out_trade_no商户订单号来对订单状态进行查询*/require_once ('./queryOrder.php'); //读取queryOrder类中的方法$out_trade_no = $_GET['out_trade_no']; //接受由前端传来的out_trade_no商户订单参数$getData = new queryOrder;$nonce_str = $getData -> get_nonce_str(); //获取32位随机字符串$sign = $getData -> getQuerySign($out_trade_no,$nonce_str); //获取请求参数中所需要的签名//echo $sign;$queryOrderBody = $getData -> queryOrderBody($out_trade_no,$nonce_str,$sign); //获取请求数据,即xml格式数据$data = file_get_contents('./queryOrderBody.xml'); //将xml格式请求数据存入变量$result = $getData -> curlRequest($data); //使用curl对接口https://api.mch./pay/orderquery进行访问file_put_contents('./resultQueryOrder.xml',$result); //将返回的数据存入文件resultQueryOrder.xml$getResultData = file_get_contents('./resultQueryOrder.xml'); //将返回的xml格式数据存入变量$disposeResultData = simpleXML_load_string($getResultData,null,LIBXML_NOCDATA); //将xml格式数据解析为对象$json_data = json_encode($disposeResultData); //将解析的对象转换为json格式数据$array_data = json_decode($json_data,true); //将json格式数据转换为数组//官方文档中只有result_code,return_code与trade_state都为SUCCESS时,表示用户支付成功$result_code = $array_data['result_code'];//获取返回数据中的result_code$return_code = $array_data['return_code'];//获取返回数据中的return_code$trade_state = $array_data['trade_state'];//获取返回数据钟的trade_state//从此处开始后面的逻辑按照个人需求来写//判断用户是否支付if($return_code == 'SUCCESS' && $result_code == 'SUCCESS' && $trade_state == 'SUCCESS'){$resultStatus = '用户该订单已支付';}else{$resultStatus = '用户该订单未支付';}echo $resultStatus;

本篇文章由CSDN用户:缱绻淡蓝海 原创,代码具有时效性,作者会不定时进行更新

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。