一、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/n/151220.html
微信扫一扫
支付宝扫一扫