背景
彰武ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
由于項目是采用java編寫的,微信包括微信支付大都是php相關,于是微信支付官方文檔對java的支持就不是很友好,在網(wǎng)上找了很多文章,基本上沒有一篇是真正跑的通的,經(jīng)過一番整理,先將java接入微信支付詳細流程總結出來以便后續(xù)使用。
步驟一
準備階段:已認證微信號,且通過微信支付認證,這個可以看微信文檔,很詳細,這里就不再重復。
步驟二
配置授權目錄,官方推薦使用https類型的url,不知道http能不能行,個人也推薦使用https的保證不會錯。
配置授權域名
步驟三
微信支付二次開發(fā)所需要的參數(shù):
APP_ID,APP_KEY,PARTNER,PARTNER_KEY(AppSecret)
APP_ID和PARTNER_KEY(AppSecret)
PARTNER
APP_KEY(自行設置32位字符)
步驟四
4.1通過頁面跳轉到確認支付頁面,其中的redirect_uri必須是配置授權目錄下的
支付測試 支付測試
4.2 獲取到openid,再經(jīng)服務器向微信請求獲取prepay_id,封裝字段并進行簽名后通過jsapi調起微信支付
網(wǎng)頁端
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>測試支付 <% String code = request.getParameter("code"); %>微信js支付測試
- 測試支付信息[]
code:<%out.print(code); %>
服務器端
@RequestMapping("/pay/payparm") public void payparm(HttpServletRequest request, HttpServletResponse response){ try { // 獲取openid String openId = (String) request.getSession().getAttribute("openId"); if (openId == null) { openId = getUserOpenId(request); } String appid = WXConfig.APP_ID; String paternerKey = WXConfig.PERTNER_KEY; String out_trade_no = getTradeNo(); MapparaMap = new HashMap (); paraMap.put("appid", appid); paraMap.put("attach", "測試"); paraMap.put("body", "測試購買支付"); paraMap.put("mch_id", WXConfig.PARTNER); paraMap.put("nonce_str", create_nonce_str()); paraMap.put("openid", openId); paraMap.put("out_trade_no", out_trade_no); paraMap.put("spbill_create_ip", getAddrIp(request)); paraMap.put("total_fee", "1"); paraMap.put("trade_type", "JSAPI"); paraMap.put("notify_url", "http://m.ebiaotong.com/WXPay/notify");// 此路徑是微信服務器調用支付結果通知路徑 String sign = getSign(paraMap, paternerKey); paraMap.put("sign", sign); // 統(tǒng)一下單 https://api.mch.weixin.qq.com/pay/unifiedorder String url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; String xml = ArrayToXml(paraMap); String xmlStr = HttpKit.post(url, xml); // 預付商品id String prepay_id = ""; if (xmlStr.indexOf("SUCCESS") != -1) { Map map = doXMLParse(xmlStr); prepay_id = (String) map.get("prepay_id"); } String timeStamp = create_timestamp(); String nonceStr = create_nonce_str(); Map payMap = new HashMap (); payMap.put("appId", appid); payMap.put("timeStamp", timeStamp); payMap.put("nonceStr", nonceStr); payMap.put("signType", "MD5"); payMap.put("package", "prepay_id=" + prepay_id); String paySign = getSign(payMap, paternerKey); payMap.put("pg", prepay_id); payMap.put("paySign", paySign); // 拼接并返回json StringBuilder sBuilder = new StringBuilder("[{"); sBuilder.append("appId:'").append(appid).append("',") .append("timeStamp:'").append(timeStamp).append("',") .append("nonceStr:'").append(nonceStr).append("',") .append("pg:'").append(prepay_id).append("',") .append("signType:'MD5',") .append("paySign:'").append(paySign).append("'"); sBuilder.append("}]"); response.getWriter().print(sBuilder.toString()); response.getWriter().close(); } catch (Exception e) { e.printStackTrace(); } }
測試結果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。