一、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
微信掃一掃
支付寶掃一掃