4.实际开发的细步骤C--请求订单接口返回结果页面

1.当前端进行调用微信订单接口的时候,

该接口微信那边会进行自己进行返回两个页面给用户,一个是符合免押的条件直接给用户确认订单,

二是为符合微信支付分的条件在微信支付分小程序上支付押金(不是在我们的程序上面的)

注意:判断用户的微信支付分是否达标是在微信那边自己会进行判断

例如:以租借充电宝为例

java微信回调设置 java微信支付回调接口_java微信回调设置

 此为判断符合分数条件

java微信回调设置 java微信支付回调接口_spring boot_02

 此为未获取到达标条件

D--用户确认订单

1.用户确认订单之后进行点击确定之后跳转到微信支付分小程序 若订单确认成功

此为借用充电宝,用户进行确认订单之后的服务

java微信回调设置 java微信支付回调接口_java微信回调设置_03

 

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.反之,用户未完成订单确认,直接返回到商户页面,则商户可自己设计逻辑。

E--确认订单进行服务

1.在这步着可以开始对用户进行自己程序的服务

F--服务完结

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();
  }
}
G--回调通知

1.次出的回调是在进行创建支付分订单的时候的notify_url 

java微信回调设置 java微信支付回调接口_微信_04

 此处填的值一定要为外网可访问的地址,如果是学习没有自己的域名,可使用natapp(免费后续会更新详细的操作说明)

2.一般回调的接口里面是对自己程序里订单的修改,为了不影响程序主路线的操作可使用rocketmq和kafka进行异步操作(后续更新相关中间的操作和区别说明)

H--相关官网资料

以下为官方的详细文档可参考

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

以下为微信支付分的大致详细流程图

java微信回调设置 java微信支付回调接口_java微信回调设置_05

 

说明:因为我选择的是需确定模式,以下是免确定模式的流程图和大致步骤

java微信回调设置 java微信支付回调接口_java微信回调设置_06

 

步骤一 商户通过《查询用户授权状态》接口,确认用户是否可使用服务。

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

步骤三 商户创建订单成功后,微信会通过《确认订单回调通知》接口通知商户订单确认情况,收到回调通知后商户开始为用户提供服务或授权功能,在收到订单确认成功通知前,商户也可以通过《查询支付分订单》接口主动查询订单确认情况。

步骤四 用户结束服务,商户根据实际情况调用《完结支付分订单》接口,微信根据《完结支付分订单》接口中传递的扣款金额完成扣款。

步骤五 微信支付扣款成功后,微信会通过《支付成功回调通知》接口立即通知商户。如扣款失败,微信支付会周期性发起扣款请求,直到扣款成功为止。  

以上部分内容参考以下该文章