Directorio de artículos
1. Introducción
Dirección del código: https://github.com/xm646236438/wechat_pay_score/tree/master
El
código y la lógica específicos de SpringBoot se pueden ver en los puntos de pago de WeChat (1) -creación de órdenes de pago y
un blog en GitHub : puntos de pago de Wechat (1) - Crear subórdenes de pago
Siguiente blog: subórdenes de pago WeChat (3) - Finalizar subórdenes de pago
2. Código
public CommonResult query(String orderNo) {
// 参数的顺序要注意, 不然会报错
Map<String, Object> map = new HashMap<>();
map.put("url", createOrderUrl);
map.put("service_id", serviceId);
map.put("out_order_no", orderNo);
map.put("appid", appId);
String urlJoint = HttpUrlUtil.urlJoint(map);
JSONObject jsonObject;
try {
log.info("请求参数: " + urlJoint);
String data = HttpRequest.get(urlJoint)
.header(Header.CONTENT_TYPE, "application/json")
.header(Header.ACCEPT, "application/json")
.header("Authorization", "WECHATPAY2-SHA256-RSA2048" + " "
+ PayScore.getToken("GET", urlJoint, "", mchId, serialNo, "pem/apiclient_key.pem"))
.body("")
.execute().body();
jsonObject = JSONObject.parseObject(data);
System.out.println("返回参数: " + jsonObject);
} catch (Exception e) {
throw new SpringExceptionResolver("500", "网络超时!");
}
switch (jsonObject.getString("state")) {
case "CREATED":
return CommonResult.fail(500, "订单未进行");
case "DOING":
// 当用户微信里面没有钱, 且对应绑定的银行卡里面也没有钱, 也就是说扣款失败的时候, 会返回该状态
// 当用户的微信里面有钱了, 微信会主动扣款, 并通知我们
return CommonResult.fail(500, "扣款失败");
case "DONE":
return CommonResult.success("SUCCESS", jsonObject);
case "REVOKED":
return CommonResult.fail(500, "订单已取消");
case "EXPIRED":
return CommonResult.fail(500, "订单已失效");
default:
return CommonResult.fail(500, "网络异常");
}
}
3, notas
1. Al solicitar, el orden de los parámetros es muy importante, la lista oficial
URL: “https://api.mch.weixin.qq.com/v3/payscore/serviceorder?service_id=500001
&out_order_no=8416518464133&appid=wxd678efh567hg6787”
或
URL: “https://api.mch.weixin.qq.com/v3/payscore/serviceorder?service_id=500001
&query_id=brnbonve1465wq3q2&appid=wxd678efh567hg6787” ;