在此講明,此調微信支付分接口文檔,可通用於微信支付分的所有調用支付分接口,在此就只寫一次為例!!!!!!!!
一.在做完結支付分訂單我們需要了解以下要求
1.商戶系統對於完結微信支付分訂單一定要做簽名,不然會報錯:未簽名。(簽名)
一.后代代碼
/** * 完結支付分訂單 * @param request * @param response * @return */ @RequestMapping(value = "/completeOrder.do", method = RequestMethod.POST) public Map<String, Object> CompleteOrder(@RequestBody Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) throws Exception { setup(); String url ="https://api.mch.weixin.qq.com/v3/payscore/serviceorder/%OUTORDERNO%/complete"; url = url .replaceAll("%OUTORDERNO%", "自己的商戶訂單號"); //簽名 String result2 = HttpRequest.post(url) .header(Header.CONTENT_TYPE,"application/json") .header(Header.ACCEPT,"application/json") .header("Authorization", "WECHATPAY2-SHA256-RSA2048"+" " + Sign.getToken("POST",url,"驗簽的參數",商戶MCHID,商戶MCHSERIALNO,“商戶私鑰路徑”))//頭信息,多個頭信息多次調用此方法即可 .body(reqdata) .execute().body(); System.out.println("result2 = " + result2); Map<String,Object> jsonToMap = JSON.parseObject(result2,Map.class); after(); return jsonToMap; } public void setup() throws IOException { PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey( new ByteArrayInputStream(你的商戶私鑰.getBytes("utf-8"))); X509Certificate wechatpayCertificate = PemUtil.loadCertificate( new ByteArrayInputStream(你的微信支付平台證書.getBytes("utf-8"))); ArrayList<X509Certificate> listCertificates = new ArrayList<>(); listCertificates.add(wechatpayCertificate); httpClient = WechatPayHttpClientBuilder.create() .withMerchant(WX_MCHID, WX_MCHSERIALNO, merchantPrivateKey) .withWechatpay(listCertificates) .build(); } // @After public void after() throws IOException { httpClient.close(); }
//method(請求類型GET、POST url(請求url) body(請求body,GET請求時body傳"",POST請求時body為請求參數的json串) merchantId(商戶號) certSerialNo(API證書序列號) keyPath(API證書路徑) public static String getToken(String method, String url, String body, String merchantId, String certSerialNo, String keyPath) throws Exception { String signStr = ""; HttpUrl httpurl = HttpUrl.parse(url); // String nonceStr = getNonceStr(); String nonceStr = "隨機字符串"; long timestamp = System.currentTimeMillis() / 1000; if (StringUtils.isEmpty(body)) { body = ""; } String message = buildMessage(method, httpurl, timestamp, nonceStr, body); String signature = sign(message.getBytes("utf-8"), keyPath); signStr = "mchid=\"" + merchantId + "\",nonce_str=\"" + nonceStr + "\",timestamp=\"" + timestamp + "\",serial_no=\"" + certSerialNo + "\",signature=\"" + signature + "\""; LOGGER.info("Authorization Token:" + signStr); System.out.println("signStr:--" + signStr); return signStr; } public static String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) { String canonicalUrl = url.encodedPath(); if (url.encodedQuery() != null) { canonicalUrl += "?" + url.encodedQuery(); } return method + "\n" + canonicalUrl + "\n" + timestamp + "\n" + nonceStr + "\n" + body + "\n"; } public static String sign(byte[] message, String keyPath) throws Exception { Signature sign = Signature.getInstance("SHA256withRSA"); sign.initSign(getPrivateKey(keyPath)); sign.update(message); return Base64.encodeBase64String(sign.sign()); }
// 你的商戶私鑰