您的位置:

微信Native支付的详细阐述

一、Native支付介绍

微信Native支付是微信支付的一种支付模式,它提供了原生应用支付的能力,支持App、PC、移动Web等多种支付场景。Native支付与传统的H5支付相比拥有更好的支付流程控制能力和更高的用户支付体验。同时,Native支付还可以提供更多的营销能力,如商家发放优惠券、代金券,提高消费者的回头率和忠诚度。

二、Native支付流程

Native支付的流程相比H5支付复杂,但是更加灵活可控。流程如下:

  1. App端生成订单,后端调用微信支付统一下单接口,获取预支付交易会话标识prepay_id。
  2. App端调用微信支付sdk,传入预支付交易会话标识prepay_id、appid、partnerid、nonce_str、timestamp、package、sign等参数,生成签名后发起微信支付请求。
  3. 微信支付系统完成付款后,会跳转回到App,并将支付结果返回给App。
  4. App端接收到支付结果,确认支付成功,通过查询订单接口确认是否真正的支付成功。
  5. 如果支付成功,商户后台收到微信支付系统的支付通知,可以更新订单状态,发放代金券、红包等相关的优惠活动。

三、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支付的开发有所帮助。

微信Native支付的详细阐述

2023-05-20
php微信支付回调,微信支付成功回调

2022-11-26
php开发微信支付小微商户v3,html5微信支付php

2023-01-07
微信支付jsapi完整源码(微信jsapi支付demo)

本文目录一览: 1、如何用PHP实现微信支付,求教。新手!说明详细点 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信的jsapi支付能整合到think

2023-12-08
php微信支付回调接口,php对接微信支付教程

2022-11-25
php微信支付不停给回调,php 微信支付回调

2023-01-04
微信小程序支付的详细阐述

2023-05-22
php微信支付回调处理的方法,php微信支付回调处理的方法是

2022-11-25
微信app支付详解

2023-05-21
微信官方扫码支付php(手机微信扫码支付)

2022-11-14
基于php的微信支付(PHP微信支付)

2022-11-09
微信支付接口详解

2023-05-20
php微信支付v3版签名生成(php 微信支付流程)

2022-11-12
微信JSAPI支付详解

2023-05-21
php服务端微信app支付(app 微信支付)

2022-11-11
php微信刷卡支付mvc,PHP微信支付

2022-11-23
微信支付接口php网站,php对接微信支付教程

2023-01-03
微支付js调用实例,前端实现微信支付

本文目录一览: 1、微信h5支付和jsapi支付的区别 2、redirect_url参数错误总结 3、微支付怎么用啊 4、微信公众平台如何开通微信支付? 5、微支付怎么开通 6、微支付中扫码支付开发流

2023-12-08
php手机端微信支付,php 微信支付流程

2022-11-25
jsapi微信支付源码(小微商户jsapi支付)

本文目录一览: 1、微信支付怎么配置jsapi 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信支付后端篇 微信支付怎么配置jsapi 微信支付,是微信

2023-12-08