1. 程式人生 > >SpringBoot支付系列 對接微信app支付 伺服器設定

SpringBoot支付系列 對接微信app支付 伺服器設定

   如圖: 獲取mcnID:

  

  配置金鑰:

第二步,引入jar包:

<dependency>
    <groupId>com.egzosn</groupId>
    <artifactId>pay-java-common</artifactId>
    <version>2.10.2</version>
</dependency>
<dependency>
    <groupId>com.egzosn</groupId>
    <artifactId>pay-java-wx</artifactId>
    <version>2.10.2</version>
</dependency>

第三步:配置引數:

private PayService service = null;
@PostConstruct
public void init() {
    WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage();
    wxPayConfigStorage.setMchId("合作者id(商戶號)");
    wxPayConfigStorage.setAppid("應用id");
    wxPayConfigStorage.setSecretKey("金鑰");
    wxPayConfigStorage.setNotifyUrl("非同步回撥地址");
    wxPayConfigStorage.setSignType(SignUtils.MD5.name());
    wxPayConfigStorage.setInputCharset("utf-8");
    service = new WxPayService(wxPayConfigStorage);

    HttpConfigStorage httpConfigStorage = new HttpConfigStorage();
    //請求連線池配置
    //最大連線數
    httpConfigStorage.setMaxTotal(20);
    //預設的每個路由的最大連線數
    httpConfigStorage.setDefaultMaxPerRoute(10);
    service.setRequestTemplateConfigStorage(httpConfigStorage);
}

第四步:供app提供建立訂單資訊介面:

/**
 * 獲取支付預訂單資訊
 *
 * @return 支付預訂單資訊
 */
@ApiOperation("返回訂單資訊")
@RequestMapping(value = "app", method = RequestMethod.POST)
public Map<String, Object> app(@RequestBody PayOrder order) {
    init();
    Map<String, Object> data = new HashMap<>();
    data.put("state", 1);
    //App支付
    order.setTransactionType(WxTransactionType.APP);
    data.put("orderInfo", service.orderInfo(order));
    return data;
}

第五步:校驗回撥資訊,設定業務邏輯:注意:此api,不需要設定api方法。否則,可能會回撥不成功。

/**
 * 支付回撥地址
 *
 * @param request
 *
 * @return
 */

@ApiOperation("回撥地址")
@RequestMapping(value = "payBack")
public String payBack(HttpServletRequest request) throws IOException {
    init();
    //獲取支付方返回的對應引數
    Map<String, Object> params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
    if (null == params) {
        return service.getPayOutMessage("fail", "失敗").toMessage();
    }

    //校驗
    if (service.verify(params)) {
        //這裡處理業務邏輯
        //......業務邏輯處理塊........
        String orderNo=(String)params.get("out_trade_no");
       if(StringUtils.isNotBlank(orderNo)){
            scmSalesOrderService.updateStatus(orderNo);
        }
        return service.getPayOutMessage("success", "成功").toMessage();
    }

    return service.getPayOutMessage("fail", "失敗").toMessage();
}