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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/151220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-10 01:13
下一篇 2024-11-11 13:40

相关推荐

  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25
  • c++ explicit的详细阐述

    一、explicit的作用 在C++中,explicit关键字可以在构造函数声明前加上,防止编译器进行自动类型转换,强制要求调用者必须强制类型转换才能调用该函数,避免了将一个参数类…

    编程 2025-04-25
  • HTMLButton属性及其详细阐述

    一、button属性介绍 button属性是HTML5新增的属性,表示指定文本框拥有可供点击的按钮。该属性包括以下几个取值: 按钮文本 提交 重置 其中,type属性表示按钮类型,…

    编程 2025-04-25
  • crontab测试的详细阐述

    一、crontab的概念 1、crontab是什么:crontab是linux操作系统中实现定时任务的程序,它能够定时执行与系统预设时间相符的指定任务。 2、crontab的使用场…

    编程 2025-04-25
  • Vim使用教程详细指南

    一、Vim使用教程 Vim是一个高度可定制的文本编辑器,可以在Linux,Mac和Windows等不同的平台上运行。它具有快速移动,复制,粘贴,查找和替换等强大功能,尤其在面对大型…

    编程 2025-04-25
  • 网站测试工具的详细阐述

    一、测试工具的概述 在软件开发的过程中,测试工具是一个非常重要的环节。测试工具可以快速、有效地检测软件中的缺陷,提高软件的质量和稳定性。与此同时,测试工具还可以提高软件开发的效率,…

    编程 2025-04-25

发表回复

登录后才能评论