一、Native支付介紹
微信Native支付是微信支付的一種支付模式,它提供了原生應用支付的能力,支持App、PC、移動Web等多種支付場景。Native支付與傳統的H5支付相比擁有更好的支付流程式控制制能力和更高的用戶支付體驗。同時,Native支付還可以提供更多的營銷能力,如商家發放優惠券、代金券,提高消費者的回頭率和忠誠度。
二、Native支付流程
Native支付的流程相比H5支付複雜,但是更加靈活可控。流程如下:
- App端生成訂單,後端調用微信支付統一下單介面,獲取預支付交易會話標識prepay_id。
- App端調用微信支付sdk,傳入預支付交易會話標識prepay_id、appid、partnerid、nonce_str、timestamp、package、sign等參數,生成簽名後發起微信支付請求。
- 微信支付系統完成付款後,會跳轉回到App,並將支付結果返回給App。
- App端接收到支付結果,確認支付成功,通過查詢訂單介面確認是否真正的支付成功。
- 如果支付成功,商戶後台收到微信支付系統的支付通知,可以更新訂單狀態,發放代金券、紅包等相關的優惠活動。
三、Native支付的配置步驟
接下來我們將詳細的介紹如何進行微信Native支付的配置。
1、註冊微信開放平台
在使用微信支付前,需要申請微信支付賬戶,註冊微信開放平台賬戶,並開發者審核通過。
2、開通微信支付
提交微信支付相關信息並審核通過,獲得微信支付的商戶號、APPID、API密鑰等信息。
3、生成API密鑰
API密鑰用於簽名、加密等操作,需要創建並保管好。生成API密鑰需要在微信商戶平台完成,打開商戶平台,依次單擊「賬戶中心」、「API安全」、「密鑰管理」。
四、Native支付的開發步驟
接下來我們將介紹如何進行微信Native支付的開發。
1、微信支付的SDK集成
微信支付的SDK提供了開發Native支付的常用組件,包括支付、重置密碼、充值、查詢訂單、發紅包等等。
代碼實例:
public class WechatPayActivity extends Activity { private IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //創建微信API對象 api = WXAPIFactory.createWXAPI(this, "您的APPID"); //調用API註冊 api.registerApp("您的APPID"); //構造支付請求 PayReq request = new PayReq(); request.appId = "您的APPID"; request.partnerId = "您的商戶號"; request.prepayId= "從伺服器端獲取的prepay_id"; request.packageValue = "Sign=WXPay"; request.nonceStr= "隨機字元串"; request.timeStamp= "時間戳"; request.sign= "簽名"; //發起支付請求 api.sendReq(request); finish();//關閉當前Activity } }
2、後端的開發
後端主要提供獲取prepay_id介面、驗簽、非同步通知等介面。
代碼實例:
/** * 獲取prepay_id,供APP調用 * @param request * @return */ @RequestMapping(value = "/getPrepayId") @ResponseBody public WXPrepayResult getPrepayId(HttpServletRequest request) { WXPrepayResult result = new WXPrepayResult(); try { //封裝微信支付請求參數 WXPayConfig config = WXPayConfig.getInstance(); WxPayVo vo = new WxPayVo(); vo.setAppid(config.getAppID()); vo.setMch_id(config.getMchID()); vo.setNonce_str(RandomUtil.generateUUID()); vo.setBody(request.getParameter("body")); vo.setOut_trade_no(request.getParameter("out_trade_no")); vo.setTotal_fee(request.getParameter("total_fee")); vo.setSpbill_create_ip(request.getParameter("spbill_create_ip")); vo.setNotify_url(config.getNotifyUrl()); vo.setTrade_type(config.getTradeType()); vo.setOpenid(request.getParameter("openid")); vo.setSign_type("MD5"); vo.setSign(SignatureUtil.sign(WXPayUtil.beanToMap(vo), config.getKey())); //調用微信支付統一下單介面,獲取預支付交易會話標識prepay_id Map resultWX = WXPayUtil.xmlToMap(WXPayUtil.mapToXml(WXPayUtil.beanToMap(vo))); resultWX = WXPayUtil.xmlToMap(HttpUtils.post(WXPayConstants.UNIFIEDORDER_URL, WXPayUtil.mapToXml(WXPayUtil.beanToMap(vo)))); if (WXPayConstants.SUCCESS.equals(resultWX.get(WXPayConstants.RETURN_CODE))) { //驗簽 if (SignatureUtil.checkIsSignValidFromMap(resultWX, config.getKey())) { //獲取prepay_id成功 result.setPrepayId(resultWX.get("prepay_id")); result.setResult_code("SUCCESS"); result.setReturn_code(WXPayConstants.SUCCESS); } else { //簽名錯誤 result.setResult_code("FAIL"); result.setReturn_code("SIGN_INVALID"); } } else { //獲取prepay_id失敗 result.setReturn_code(resultWX.get(WXPayConstants.RETURN_CODE)); result.setReturn_msg(resultWX.get(WXPayConstants.RETURN_MSG)); result.setResult_code("FAIL"); } } catch (Exception e) { //異常處理 result.setResult_code("FAIL"); result.setReturn_msg(e.getMessage()); } return result; }
五、Native支付的安全保障
Native支付在支付過程中需要保證安全性,以下是保證安全的措施。
1、數據的加密傳輸
所有的數據在傳輸的時候都採用了數據加密的方式來進行傳輸,保證了數據的完整性和安全性。
2、商戶身份的驗證
在支付過程中需要對商戶的身份進行認證,確保每一個支付請求都來自合法的商戶。
3、支付請求的合法性驗證
在支付請求發起前,需要驗證支付請求的合法性,防止支付請求被修改、篡改。
六、結語
本文介紹了微信Native支付的概念、流程、配置步驟、開發步驟、以及支付安全等相關內容。希望對大家進行微信Native支付的開發有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151220.html