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相关的类的代码:
<?php
require_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.weixin.qq.com/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.weixin.qq.com/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.weixin.qq.com/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用户:缱绻淡蓝海 原创,代码具有时效性,作者会不定时进行更新
PHP实现对小程序微信支付v2订单的结果查询相关推荐
- PHP实现小程序微信支付V2获取prepay_id
PS:本文旨在简单获取prepay_id,只是简单的介绍一下流程,并非完整的订单支付流程 小程序端JS代码: getxml(){var test = thiswx.getStorage({ //从缓存 ...
- PHP实现小程序微信支付v3版本退款,以及对退款订单进行查询
PS:本篇文章仅用作对小程序微信支付v3版本的退款流程以及对退款订单进行查询的流程展示,如要用于实际,还请自行修改代码 文章中调用的API_Connect.php 与API_v3Connect.php ...
- 调用支付jsapi缺少参数appid_服务商模式下的小程序微信支付
最近,要做一个小程序商城的项目,需要在小程序中用到分账功能,也就是顾客购买商品支付的钱要给各个店铺,这就需要用到服务商模式. 在谈服务商模式下小程序微信支付之前,我们先要有一个服务商的商户号,这个商户 ...
- java 后台 小程序微信支付
java 后台 小程序微信支付 步骤说明: 微信公众平台支付接口调试工具 #1.生成字符串: appid=appId&body=测试商品名称&mch_id=商户号&nonce_ ...
- 小程序微信支付开发流程记录
我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只有我有开发过JSAPI的微信支付的经验 ...
- 微信小程序收款手续费_小程序微信支付收款流程
大家都知道,小程序具备微信支付功能,但是,很多商家还不知道具体的收款流程是什么?用户在小程序下单支付的款项究竟到了哪里?或者找第三方公司开发担心资金安全问题? 今天给大家详细的讲解一下: 在实现微信小 ...
- laravel小程序微信支付
php小程序微信支付类 laravel小程序微信支付分享地址http://www.xiaoshu168.com/php/232.html
- 微信小程序 微信支付代码实现流程
微信小程序 微信支付是一个很简单的流程 微信开发文档 地址:wx.requestPayment(Object object) | 微信开放文档 微信公众平台申请支付功能 百度一大堆例举代码 官方文档 ...
- nodejs实现小程序微信支付
最近做小程序时用到了微信支付很是开心,因为之前支付一直都没有做过,终于又可以学点东西了.于是很开心的去看了下微信小程序的支付接口,没想到,事情基本都是后端做的,前端只要调用wx.requestPaym ...
最新文章
- psnr 与 ssim评测步骤
- git clone错误 fatal: early EOF fatal: index-pack failed
- Linux文件系统中文版,Linux 文件系统-Go语言中文社区
- C++中的“error:LNK2005 已经在*.obj中定义”异常
- c语言编程 完美数,用完美数的数字之美激发学生学习C语言编程的兴趣
- python单例模式继承_Python四种实现单例模式的方法
- 测开2 - Python(文件操作)
- ubuntu16.04安装微信
- ubuntu18的网关ip在哪里配_技术|如何在 Ubuntu 18.04 LTS 中配置 IP 地址
- C语言访问存储器的方法
- linux下kafka安装与配置
- java bo对象_java的几种对象(PO,VO,DAO,BO,POJO)解释 (转)
- SpringMvc @PathVariable 工作原理
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
- java利用iText.jar实现jpg转pdf
- 【答题卡识别】基于matlab GUI hough变换答题卡成绩统计(带面板)【含Matlab源码 1828期】
- [需求管理-9]:需求规格说明书SRS
- 华为手机刷机功能总结
- Yeti Feather贴图着色与Arnold 渲染
- 饭前一根香蕉,到底有多好!