700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 小程序php取消运单 浅析微信支付:查询订单和关闭订单

小程序php取消运单 浅析微信支付:查询订单和关闭订单

时间:2018-10-12 09:34:26

相关推荐

小程序php取消运单 浅析微信支付:查询订单和关闭订单

浅析微信支付系列已经更新六篇了哟~,没有看过的朋友们可以看一下哦。

浅析微信支付:支付结果通知

浅析微信支付:统一下单接口

浅析微信支付:微信公众号网页授权

声明:这里的查询订单、关闭订单接口仅适用于小程序支付、公共号支付、扫码支付、APP支付,刷卡支付方式此处并不适用。

1、查询订单

以下为微信官方的查询订单文档:

https://pay./wiki/doc/api/jsapi.php?chapter=9_2

1.1. 应用场景

该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。

需要调用查询接口的情况:

◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;

◆ 调用支付接口后,返回系统错误或未知交易状态情况;

◆ 调用刷卡支付API,返回USERPAYING的状态;

◆ 调用关单或撤销接口API之前,需确认支付状态;

1.2. 接口链接

https://api.mch./pay/orderquery

1.3. 是否需要证书

不需要

1.4. 调用接口

查询订单接口需要使用微信订单号或者商户订单号来查询,其他参数为商户平台信息的公共参数,为常量,此处省略解释。

微信订单号:transaction_id(微信的订单号,建议优先使用)

商户订单号:out_trade_no(商户系统内部订单号)

此两个参数必填其中之一,微信推荐使用微信订单号来查询,下面为实现代码:

private void doOrderQuery() {

System.out.println("查询订单");

HashMap data = new HashMap();

// data.put("out_trade_no", out_trade_no);

data.put("transaction_id", "400885200108221962061594");

try {

WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance());

Map r = wxPay.orderQuery(data);

System.out.println(r);

} catch (Exception e) {

e.printStackTrace();

}

}

wxPay.orderQuery方法为封装的sdk方法,具体实现请参考作者github源码。

对于商户关键信息的写入,公共方法为wxPay.fillRequestData,实现如下:

/**

* 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign

* 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口

*

* @param reqData r

* @return map

* @throws Exception e

*/

public Map fillRequestData(Map reqData) throws Exception {

reqData.put("appid", config.getAppID());

reqData.put("mch_id", config.getMchID());

reqData.put("nonce_str", WXPayUtil.generateNonceStr());

if (SignType.MD5.equals(this.signType)) {

reqData.put("sign_type", WXPayConstants.MD5);

} else if (SignType.HMACSHA256.equals(this.signType)) {

reqData.put("sign_type", WXPayConstants.HMACSHA256);

}

reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType));

return reqData;

}

以上为查询微信订单的使用方式,具体的返回参数请参考官方文档。

2、关闭订单

以下为微信官方的关闭订单文档:

https://pay./wiki/doc/api/jsapi.php?chapter=9_3

2.1. 应用场景

以下情况需要调用关单接口:

商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;

系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。

注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。

2.2. 接口链接

https://api.mch./pay/closeorder

2.3. 是否需要证书

不需要

2.4. 调用接口

关闭订单接口需要使用商户订单号来查询,其他参数为商户平台信息的公共参数,为常量,此处省略解释。

商户订单号:out_trade_no(商户系统内部订单号)

PS:关单接口只能使用微信订单号来查询,和查询接口不同,下面为实现代码:

private void doOrderClose() {

System.out.println("关闭订单");

HashMap data = new HashMap();

data.put("out_trade_no", out_trade_no);

try {

WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance());

Map r = wxPay.closeOrder(data);

System.out.println(r);

} catch (Exception e) {

e.printStackTrace();

}

}

关单接口的公共参数设置和查询订单一致,这里就不重复解释了,具体的返回参数请参考微信官方文档。

PS:关单接口可能会调用失败,已支付、已关闭等场景,所以需要开发者注意官方文档中的错误码,对异常情况进行处理。

结语

以上为查询订单、关闭订单的调用方式,如果是刷卡支付方式,他的关闭订单接口为撤销订单:reverse,在作者sdk源码中也有具体的实现方式。

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

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