java服务端微信APP支付接口详解

Java服务端微信APP支付接口详解

微信APP支付是在APP中使用微信支付的一种方式。它通常使用在Android或iOS移动设备上。

在本篇攻略中,我们将会讲解如何使用Java来构建微信APP支付的服务端接口。

前置条件

在开始构建微信APP支付接口之前,我们需要确保以下条件已经满足:

  • 你已经在微信商户平台上开通了支付功能,并且获得了商户号、支付密钥等相关信息。
  • 你已经熟悉了微信支付的基本概念和API接口。

准备工作

在开始构建服务端接口之前,我们需要完成一些准备工作,包括:

  • 添加微信支付SDK到项目中
  • 配置项目相关信息
  • 构建支付请求

添加微信支付SDK到项目中

我们可以通过以下方式将微信支付SDK添加到项目中:

<dependency>
   <groupId>com.github.wxpay</groupId>
   <artifactId>wxpay-sdk</artifactId>
   <version>3.0.9</version>
</dependency>

配置项目相关信息

我们需要配置一些项目相关的信息,包括商户号、APPID、支付密钥等。可以通过以下方式实现:

WXPayConfig config = new WXPayConfig();
config.setAppID("wxAPPID");
config.setMchID("wxMCHID");
config.setKey("wxPAYKEY");
config.setNotifyURL("http://www.example.com/wxpay/notify");

构建支付请求

在请求支付之前,我们需要先构建请求对象,包含订单号、金额、客户端IP等信息。可以通过以下方式实现:

WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("time_start", "20160909105959");
data.put("time_expire", "20160909111959");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "APP");  
Map<String, String> resp = wxpay.unifiedOrder(data);
System.out.println(resp);

支付流程

当我们构建好支付请求之后,接下来将会执行一系列的流程来完成支付。下面是详细的支付流程。

1.生成签名

在完成支付请求之后,我们首先需要对请求参数进行签名,用于在接下来的支付过程中进行校验。可以通过以下方式实现:

data.put("sign", WXPayUtil.generateSignature(data, "wxPAYKEY"));

2.发送支付请求

在完成签名之后,我们将会将支付请求以XML的格式发送到微信支付服务器,并获得服务器的响应。可以通过以下方式实现:

Map<String, String> resp = wxpay.unifiedOrder(data);

3.解析支付结果

接收到微信支付服务器的响应之后,我们需要对响应结果进行解析,以获取支付结果。可以通过以下方式实现:

boolean result = wxpay.isPayResultNotifySignatureValid(resp);
if(result){
   //验证成功
}else{
   //验证失败
}

4.生成APP支付参数

在获取到支付结果之后,我们需要根据结果构建APP支付参数,并传递给客户端。可以通过以下方式实现:

data.put("prepayid", resp.get("prepay_id"));
data.put("partnerid", config.getMchID());
data.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
data.put("noncestr", WXPayUtil.generateNonceStr());
data.put("package", "Sign=WXPay");
data.put("sign", WXPayUtil.generateSignature(data, config.getKey()));

5.调用APP支付

在构建完APP支付参数后,我们将会在客户端调用APP支付。可以通过以下方式实现:

PayReq req = new PayReq();
req.appId = data.get("appid");
req.partnerId = data.get("partnerid");
req.prepayId = data.get("prepayid");
req.packageValue = data.get("package");
req.nonceStr = data.get("noncestr");
req.timeStamp = data.get("timestamp");
req.sign = data.get("sign");
api.sendReq(req);

示例说明

下面是两个基于Java实现的微信APP支付示例,用于演示如何使用Java构建微信APP支付服务端接口。

示例一

WXPayConfig config = new WXPayConfig();
config.setAppID("wxAPPID");
config.setMchID("wxMCHID");
config.setKey("wxPAYKEY");
config.setNotifyURL("http://www.example.com/wxpay/notify");

WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("time_start", "20160909105959");
data.put("time_expire", "20160909111959");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "APP");  
Map<String, String> resp = wxpay.unifiedOrder(data);

boolean result = wxpay.isPayResultNotifySignatureValid(resp);
if(result){
   data.put("prepayid", resp.get("prepay_id"));
   data.put("partnerid", config.getMchID());
   data.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
   data.put("noncestr", WXPayUtil.generateNonceStr());
   data.put("package", "Sign=WXPay");
   data.put("sign", WXPayUtil.generateSignature(data, config.getKey()));

   PayReq req = new PayReq();
   req.appId = data.get("appid");
   req.partnerId = data.get("partnerid");
   req.prepayId = data.get("prepayid");
   req.packageValue = data.get("package");
   req.nonceStr = data.get("noncestr");
   req.timeStamp = data.get("timestamp");
   req.sign = data.get("sign");
   api.sendReq(req);
}

示例二

WXPayConfig config = new WXPayConfig();
config.setAppID("wxAPPID");
config.setMchID("wxMCHID");
config.setKey("wxPAYKEY");
config.setNotifyURL("http://www.example.com/wxpay/notify");

WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("time_start", "20160909105959");
data.put("time_expire", "20160909111959");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "APP");  
Map<String, String> resp = wxpay.unifiedOrder(data);

boolean result = wxpay.isPayResultNotifySignatureValid(resp);
if(result){
   data.put("prepayid", resp.get("prepay_id"));
   data.put("partnerid", config.getMchID());
   data.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
   data.put("noncestr", WXPayUtil.generateNonceStr());
   data.put("package", "Sign=WXPay");
   data.put("sign", WXPayUtil.generateSignature(data, config.getKey()));

   JSONObject obj = new JSONObject();
   obj.put("appid", data.get("appid"));
   obj.put("partnerid", data.get("partnerid"));
   obj.put("prepayid", data.get("prepayid"));
   obj.put("noncestr", data.get("noncestr"));
   obj.put("package", data.get("package"));
   obj.put("timestamp", data.get("timestamp"));
   obj.put("sign", data.get("sign"));

   return obj.toString();
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java服务端微信APP支付接口详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Kubernetes调度管理优先级和抢占机制详解

    Kubernetes调度管理优先级和抢占机制详解 1. 调度管理优先级 Kubernetes调度管理器使用一系列策略来确定将容器调度到哪个节点。调度管理优先级用于决定哪些容器应该首先被调度。调度管理优先级的设置可以确保在资源有限的情况下,重要的容器能够被优先调度。 1.1 前优先级(Preemption) 前优先级在Kubernetes 1.14及更高版本中…

    other 2023年6月28日
    00
  • TMS320DM642学习—第二篇(软件环境搭建+工程文件结构)

    TMS320DM642学习—第二篇(软件环境搭建+工程文件结构) 本文将介绍如何搭建TMS320DM642的软件开发环境,并介绍其工程文件结构。 软件环境搭建 首先,我们需要下载并安装CCS(Code Composer Studio)软件,这是一款集成了TI处理器开发工具的IDE。TI官网提供了CCS的免费下载,并提供了对应的安装流程说明。安装完CCS后…

    其他 2023年3月28日
    00
  • 在android中ScrollView嵌套ScrollView解决方案

    在Android中,ScrollView是一个常用的滚动视图容器,用于在屏幕上显示超出屏幕范围的内容。然而,ScrollView本身不支持嵌套,即在一个ScrollView中再嵌套一个ScrollView会导致滚动冲突的问题。本攻略将介绍如何解决在Android中嵌套ScrollView的问题。 解决方案一:使用NestedScrollView Androi…

    other 2023年7月28日
    00
  • pycharm软件代码配色和字体设置

    以下是“PyCharm软件代码配色和字体设置的完整攻略”的标准markdown格式文本,其中包含两个示例: PyCharm软件代码配色和字体设置的完整攻略 PyCharm是款流行的Python集成开发环境(IDE),提供了丰富的代码配色和字体设置选项,以满足不同用户的求。以下是PyCharm软件代码配色和字体设置的完整攻略。 1. 代码配色设置 PyChar…

    other 2023年5月10日
    00
  • 手机内存空间里有个youmicache文件夹能删吗?youmicache文件夹是干什么用的?

    手机内存空间里的youmicache文件夹能删吗?youmicache文件夹是干什么用的? 你好!youmicache文件夹是一种用于存储应用程序缓存数据的文件夹。在Android系统中,许多应用程序会使用缓存来提高性能和加载速度。youmicache文件夹是其中一个常见的缓存文件夹之一。删除youmicache文件夹可能会有一些影响,但通常是安全的。 在大…

    other 2023年8月1日
    00
  • 在Flex中给datagrid添加右键菜单项的具体实现

    在Flex中给DataGrid添加右键菜单项的具体实现,需要通过以下步骤完成: 第一步:创建ContextMenu对象 在Flex中,使用ContextMenu可以很容易地实现右键菜单功能。我们需要先创建一个ContextMenu对象,并设置需要添加的菜单项。示例代码如下: var contextMenu:ContextMenu = new ContextM…

    other 2023年6月27日
    00
  • Android自定义流式布局/自动换行布局实例

    Android自定义流式布局/自动换行布局实例攻略 在Android开发中,有时我们需要实现一种自定义的布局,能够自动换行并适应不同的屏幕尺寸。这种布局被称为流式布局或自动换行布局。下面是一个详细的攻略,包含两个示例说明。 步骤1:创建自定义布局类 首先,我们需要创建一个自定义的布局类,继承自ViewGroup。这个类将负责管理子视图的位置和大小。 publ…

    other 2023年9月5日
    00
  • tomcat访问管理页面出现:403accessdenied解决方法

    以下是详细讲解“tomcat访问管理页面出现:403accessdenied解决方法的完整攻略”的标准Markdown格式文本,包含两个示例说明: tomcat访问管理页面出现:403accessdenied解决方法的完整攻略 在使用Tomcat时,有时会出现访问管理页面时出现403 Access Denied的错误。本攻略将介绍如何解决这个问题。 步骤一:…

    other 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部