1.当前端进行调用微信订单接口的时候,
该接口微信那边会进行自己进行返回两个页面给用户,一个是符合免押的条件直接给用户确认订单,
二是为符合微信支付分的条件在微信支付分小程序上支付押金(不是在我们的程序上面的)
注意:判断用户的微信支付分是否达标是在微信那边自己会进行判断
例如:以租借充电宝为例
此为判断符合分数条件
此为未获取到达标条件
1.用户确认订单之后进行点击确定之后跳转到微信支付分小程序 若订单确认成功
此为借用充电宝,用户进行确认订单之后的服务
2.若订单确认成功,微信会通过《确认订单回调通知》接口,主动通知商户
以下为确认订单回调通知接口
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_21.shtml
3.商户也可以通过《查询支付分订单》接口,主动查询订单确认情况
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_15.shtml
public void GetServiceOrder() throws Exception{
//请求URL
HttpGet httpGet = new HttpGet("https://api.mch.weixin.qq.com/v3/payscore/serviceorder?service_id=500001&out_order_no=8416518464133&appid=wxd678efh567hg6787");
httpGet.setHeader("Accept", "application/json");
//完成签名并执行请求
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) { //处理成功
System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
} else if (statusCode == 204) { //处理成功,无返回Body
System.out.println("success");
} else {
System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
throw new IOException("request failed");
}
} finally {
response.close();
}
}
4.反之,用户未完成订单确认,直接返回到商户页面,则商户可自己设计逻辑。
1.在这步着可以开始对用户进行自己程序的服务
1.当服务进行完结之后进行调用完结支付分订单接口--当判断返回的错误码也200即表明为处理成功,
完结接口调用成功后,微信支付将自动发起免密代扣。 若扣款失败,微信支付将自动再次发起免密代扣(按照一定频次),直到扣成功为止。
API参数涉及时间参数时需注意,可能由于商户时钟系统和微信支付分时钟系统,取当前时间存在一定误差。可能导致在API调用出现失败情况。因此商户在传入时间参数时需预留一定误差时间
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_18.shtml
public void CompleteServiceOrder() throws Exception{
//请求URL
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/payscore/serviceorder/{out_order_no}/complete");
// 请求body参数
String reqdata = "{"
+ "\"appid\":\"wxd678efh567hg6787\","
+ "\"service_id\":\"500001\","
+ "\"post_payments\": ["
+ "{"
+ "\"name\":\"就餐费用服务费\","
+ "\"amount\":4000,"
+ "\"description\":\"就餐人均100元服务费:100/小时\","
+ "\"count\":1"
+ "}"
+ "],"
+ "\"post_discounts\": ["
+ "{"
+ "\"name\":\"满20减1元\","
+ "\"description\":\"不与其他优惠叠加\","
+ "\"amount\":4000"
+ "}"
+ "],"
+ "\"total_amount\":3900,"
+ "\"time_range\": {"
+ "\"start_time\":\"20091225091010\","
+ "\"end_time\":\"20091225121010\""
+ "},"
+ "\"location\": {"
+ "\"end_location\":\"嗨客时尚主题展餐厅\""
+ "},"
+ "\"profit_sharing\":false"
+ "}";
StringEntity entity = new StringEntity(reqdata,"utf-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
httpPost.setHeader("Accept", "application/json");
//完成签名并执行请求
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) { //处理成功
System.out.println("success,return body = " + EntityUtils.toString(response.getEntity()));
} else if (statusCode == 204) { //处理成功,无返回Body
System.out.println("success");
} else {
System.out.println("failed,resp code = " + statusCode+ ",return body = " + EntityUtils.toString(response.getEntity()));
throw new IOException("request failed");
}
} finally {
response.close();
}
}
1.次出的回调是在进行创建支付分订单的时候的notify_url
此处填的值一定要为外网可访问的地址,如果是学习没有自己的域名,可使用natapp(免费后续会更新详细的操作说明)
2.一般回调的接口里面是对自己程序里订单的修改,为了不影响程序主路线的操作可使用rocketmq和kafka进行异步操作(后续更新相关中间的操作和区别说明)
以下为官方的详细文档可参考
https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient/blob/master/README.md
以下为官方的详细操作文档可参考,有详细的代码可观看(需确定模式)
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_2.shtml
以下为微信支付分的大致详细流程图
步骤一 商户通过《查询用户授权状态》接口,确认用户是否可使用服务。
https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/payscore/chapter3_8.shtml
步骤二 如用户可使用服务,则请求《创建支付分订单》接口,创建订单。反之,则引导用户【授权服务】(《APP调起支付分-授权服务》、《H5调起支付分-授权服务》、《小程序调起支付分-授权服务》),授权服务成功后微信会通过《授权/解除授权服务回调通知API》接口立即通知商户,在收到授权服务成功通知前,商户也可以通过《查询用户授权状态》接口主动查询用户是否可使用服务。查询用户授权状态:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/payscore/chapter3_8.shtml
步骤三 商户创建订单成功后,微信会通过《确认订单回调通知》接口通知商户订单确认情况,收到回调通知后商户开始为用户提供服务或授权功能,在收到订单确认成功通知前,商户也可以通过《查询支付分订单》接口主动查询订单确认情况。
步骤四 用户结束服务,商户根据实际情况调用《完结支付分订单》接口,微信根据《完结支付分订单》接口中传递的扣款金额完成扣款。
步骤五 微信支付扣款成功后,微信会通过《支付成功回调通知》接口立即通知商户。如扣款失败,微信支付会周期性发起扣款请求,直到扣款成功为止。
以上部分内容参考以下该文章