Java 后端微信支付demo

摘要:
Java后端微信支付demo一、导入微信SDK二、在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建)三、实现微信的WXPayConfig接口1packagecom.ieou.demo.common;234importcom.github.wxpay.sdk.WXPayConfig;5importorg.apache.commons.io.IOUt
Java 后端微信支付demo

一、导入微信SDK

Java 后端微信支付demo第1张

二、在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建)

Java 后端微信支付demo第2张

三、实现微信的WXPayConfig接口

1 packagecom.ieou.demo.common;
2 
3 
4 importcom.github.wxpay.sdk.WXPayConfig;
5 importorg.apache.commons.io.IOUtils;
6 
7 importjava.io.ByteArrayInputStream;
8 importjava.io.InputStream;
9 
10 /**配置我们自己的信息  */
11 
12 public class OurWxPayConfig implementsWXPayConfig {
13 
14     /**加载证书  这里证书需要到微信商户平台进行下载*/
15     private byte[] certData;
16 
17     public OurWxPayConfig() throwsException{
18         InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("cert/wxpay/apiclient_cert.p12");
19         this.certData =IOUtils.toByteArray(certStream);
20 certStream.close();
21 }
22 
23     /**设置我们自己的appid
24 * 商户号
25 * 秘钥
26 * */
27 
28 @Override
29     publicString getAppID() {
30         return "wx7494893843843c";
31 }
32 
33 @Override
34     publicString getMchID() {
35         return "4672984344";
36 }
37 
38 @Override
39     publicString getKey() {
40         return "qbH5l4N3468798dfgK";
41 }
42 
43 @Override
44     publicInputStream getCertStream() {
45         return new ByteArrayInputStream(this.certData);
46 }
47 
48 @Override
49     public intgetHttpConnectTimeoutMs() {
50         return 0;
51 }
52 
53 @Override
54     public intgetHttpReadTimeoutMs() {
55         return 0;
56 }
57 }

四、构建自己的参数

packagecom.ieou.demo.common;
importjava.math.BigDecimal;
public classWxpayParam {
    /**微信支付的金额是String类型 并且是以分为单位
     * 下面举个例子单位是元是怎么转为分的
     * */
    BigDecimal totalPrice  = new BigDecimal(1); //此时的单位是元
    private String body = "xxx等商品信息";
    private String totalFee = totalPrice.multiply(new BigDecimal(100)).toBigInteger().toString();
    /**随机数字字符串*/
    private String outTradeNo = "4784984230432842944";
    publicString getBody() {
        returnbody;
    }
    public voidsetBody(String body) {
        this.body =body;
    }
    publicString getTotalFee() {
        returntotalFee;
    }
    public voidsetTotalFee(String totalFee) {
        this.totalFee =totalFee;
    }
    publicString getOutTradeNo() {
        returnoutTradeNo;
    }
    public voidsetOutTradeNo(String outTradeNo) {
        this.outTradeNo =outTradeNo;
    }
}

五、配置微信统一下单接口需要的参数,并调用微信统一下单接口

1 packagecom.ieou.demo.controller;
2 
3 importcom.github.wxpay.sdk.WXPay;
4 importcom.github.wxpay.sdk.WXPayUtil;
5 importcom.ieou.demo.common.OurWxPayConfig;
6 importcom.ieou.demo.common.WxpayParam;
7 importorg.springframework.web.bind.annotation.GetMapping;
8 importorg.springframework.web.bind.annotation.RequestMapping;
9 importorg.springframework.web.bind.annotation.RestController;
10 
11 importjava.util.HashMap;
12 importjava.util.Map;
13 
14 
15 @RestController
16 @RequestMapping("/")
17 public classWxPayController {
18 
19     @GetMapping("/pay")
20     public Map<String,String> wxPayFunction() throwsException{
21 
22         WxpayParam wxpayParam = newWxpayParam();
23         String notifyUrl = "www.baidu.com";  //我这里的回调地址是随便写的,到时候需要换成处理业务的回调接口
24 
25         OurWxPayConfig ourWxPayConfig = newOurWxPayConfig();
26         WXPay wxPay = newWXPay(ourWxPayConfig);
27 
28         //根据微信支付api来设置
29         Map<String,String> data = new HashMap<>();
30         data.put("appid",ourWxPayConfig.getAppID());
31         data.put("mch_id",ourWxPayConfig.getMchID());         //商户号
32         data.put("trade_type","APP");                         //支付场景 APP 微信app支付 JSAPI 公众号支付  NATIVE 扫码支付
33         data.put("notify_url",notifyUrl);                     //回调地址
34         data.put("spbill_create_ip","127.0.0.1");             //终端ip
35         data.put("total_fee",wxpayParam.getTotalFee());       //订单总金额
36         data.put("fee_type","CNY");                           //默认人民币
37         data.put("out_trade_no",wxpayParam.getOutTradeNo());   //交易号
38         data.put("body",wxpayParam.getBody());
39         data.put("nonce_str","bfrhncjkfdkfd");   //随机字符串小于32位
40         String s = WXPayUtil.generateSignature(data, ourWxPayConfig.getKey());  //签名
41         data.put("sign",s);
42         
43         /**wxPay.unifiedOrder 这个方法中调用微信统一下单接口 */
44         Map<String, String> respData =wxPay.unifiedOrder(data); 
45         if (respData.get("return_code").equals("SUCCESS")){
46 
47             //返回给APP端的参数,APP端再调起支付接口
48             Map<String,String> repData = new HashMap<>();
49             repData.put("appid",ourWxPayConfig.getAppID());
50             repData.put("mch_id",ourWxPayConfig.getMchID());
51             repData.put("prepayid",respData.get("prepay_id"));
52             repData.put("package","WXPay");
53             repData.put("noncestr",respData.get("nonce_str"));
54             repData.put("timestamp",String.valueOf(System.currentTimeMillis()/1000));
55             String sign = WXPayUtil.generateSignature(repData,ourWxPayConfig.getKey()); //签名
56             respData.put("sign",sign);
57             respData.put("timestamp",repData.get("timestamp"));
58             respData.put("package","WXPay");
59             returnrespData;
60 }
61         throw new Exception(respData.get("return_msg"));
62 }
63 }

六、至此,后端代码已经结束,前端拿到返回值调用微信发起支付接口就可以了。

免责声明:文章转载自《Java 后端微信支付demo》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring Boot源码(一)Spring Boot源码环境搭建2.SJ-SLAM-14下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android ORM——初识greenDAO 3及使用greenDAO 3前应该掌握的一些知识点(一)

引言 总所周知,SQLite——内嵌于Android中一个占用内存极小的关系型,作为我们Android存储领域中重要的一员 ,或多或少都曾接触到数据库。即使Android系统中提供了很多操作SQLite的API,可是在业务开发中还是须要手动去编写原生SQL语句,这不仅复杂、不好维护。更重要的是不高效,经常会由于SQL语句写错而添加了开发成本,于是便出现...

Jmeter之Bean shell使用(一)

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。...

DevExpress WPF让创建绑定到数据的3D图表控件变得更容易(Part 1)

下载DevExpress v20.1完整版 富文本控件难上手?这堂公开课你一定不能错过,不同视图不同应用场景全解! 通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 在本教程中,您将完成可视化数据源所需的步骤。 应该执行以下步骤,本文我们将...

C#中JSON字符串中的转义字符

新建一个.NET Core控制台项目,然后引入Json.NET的NuGet包:Newtonsoft.Json,我们使用Json.NET将类序列化为JSON字符串,再将JSON字符串反序列化为类,代码如下: using Newtonsoft.Json; using System; namespace NetCoreJson { public cla...

Thrift的TJsonProtocol协议分析

Thrift协议实现目前有二进制协议(TBinaryProtocol),紧凑型二进制协议(TCompactProtocol)和Json协议(TJsonProtocol)。 前面的两篇文字从编码和协议原理方面分析了TBinaryProtocol和TCompactProtocol协议,下面对TJsonProtocol协议做一下分析。 TJsonProtocol...

.Net Core微服务入门全纪录(一)——项目搭建

Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。 前言 写这篇博客主要目的是记录一下自己的学习过程,只能是简单入门级别的,因为水平有限就写到哪算哪吧,写的不对之处欢迎指正。 代码放在:https://github.com/xiajingren/NetCoreMicroserviceDemo 什么是微服务? 关于微服务的概念解释网上有很多......