pringboot整合微信支付sdk

之前做的几个微信小程序项目,大部分客户都有要在微信小程序前端提现的需求。提现功能的实现,自然使用企业付款接口,不过这个功能开通比较麻烦,要满足3个条件。;
之前实现过几个微信支付的接口,不过都是自己码的代码,从网上找找拼凑,觉得看起来不舒服~_~ 于是乎找到了微信官方提供的支付sdk。这里用的是java版本,springboot整合java

  • 下载sdk,引入项目

这里可以直接下载官方提供的sdk,然后将几个java类拷贝到你的项目,也可以直接引入maven依赖,这里是直接将Java类拷贝到我项目的。

<!-- https://mvnrepository.com/artifact/com.github.wxpay/WXPay-SDK-Java -->
<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>WXPay-SDK-Java</artifactId>
    <version>0.0.4</version>
</dependency>

如图,打开sdk项目,会有以下几个文件

  • 配置config文件

通过它的readme文件,可以看到几个demo。但是首先我们需要配置相关的信息。新建一个java类继承原先的配置类。

package com.github.wxpay.sdk;

import java.io.InputStream;

/**
 * @author Ean
 * @date 2019/7/2
 */
public class MyConfig extends WXPayConfig {
    /**
     * 获取 App ID
     *
     * @return App ID
     */
    @Override
    String getAppID() {
        return "wxdb70c7c6b******";
    }

    /**
     * 获取 Mch ID
     *
     * @return Mch ID
     */
    @Override
    String getMchID() {
        return "1522050000";
    }

    /**
     * 获取 API 密钥
     *
     * @return API密钥
     */
    @Override
    String getKey() {
        return "xxxxxxxxxxxxxxxx";
    }

    /**
     * 获取商户证书内容
     * 这里是读取resources根目录下面的证书文件
     * @return 商户证书内容
     */
    @Override
    InputStream getCertStream() {
        InputStream certStream =  Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12");
        return certStream;
    }

    /**
     * 获取WXPayDomain, 用于多域名容灾自动切换
     * 实现这个接口
     * @return
     */
    @Override
    public IWXPayDomain getWXPayDomain() {
        IWXPayDomain iwxPayDomain = new IWXPayDomain() {
            public void report(String domain, long elapsedTimeMillis, Exception ex) {
            }

            public DomainInfo getDomain(WXPayConfig config) {
                return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true);
            }
        };
        return iwxPayDomain;
    }
}
  • 提现接口开发

写一个提现接口,传入提现相关的参数

    /**
     *@描述 提现接口
     *@参数  [param]
     *@创建人  Eangaie
     *@创建时间  2019/7/2
     */
    @PostMapping("despot")
    public Result despot(@RequestBody Map<String,Object> param) throws Exception {
        MyConfig config = new MyConfig();
        WXPay wxpay = new WXPay(config,1);
        SortedMap<String, String> sendData;
        sendData=getDespData(param);
        sendData.put("sign",  WXPayUtil.generateSignature(sendData,key , WXPayConstants.SignType.MD5));
        Map<String,String> resData=wxpay.despot(sendData,config.getHttpConnectTimeoutMs(),config.getHttpReadTimeoutMs());
        return ResultUtil.success(resData);
    }

    private SortedMap<String, String> getDespData(Map<String, Object> param) {
        SortedMap<String, String> params = new TreeMap<String, String>();
        String nonce_str=commonUtil.gen32RandomString();
        String partner_trade_no=commonUtil.createNo();
        String openid= String.valueOf(param.get("openid"));
        String check_name="NO_CHECK";
        String amount= String.valueOf(param.get("amount"));
        String desc="用户提现";
        String spbill_create_ip= String.valueOf(param.get("spbill_create_ip"));
        params.put("mch_appid",mch_appid);
        params.put("mchid",mchid);
        params.put("nonce_str",nonce_str);
        params.put("partner_trade_no",partner_trade_no);
        params.put("openid",openid);
        params.put("check_name",check_name);
        params.put("amount", amount);
        params.put("desc", desc);
        params.put("spbill_create_ip", spbill_create_ip);
        return params;
    }

这里的一些变量,比如商户id,appid这些直接通过spring扫描application配置文件自动注入,接口参数主要是传过来openid,跟提现金额。其实这个spbill_create_ip字段也可以固定的。
一开始是因为开发一直遇到IP不允许访问的问题,最后发现。。是商户号配置锅,商户号记得把配置允许IP访问这个地方关了!,不然就一直不能访问接口

提现成功返回,但是程序也会报500,因为processResponseXml这个函数里面有校验返回值。但是提现这里用不到,可以注释掉代码。

 else if (return_code.equals(WXPayConstants.SUCCESS)) {
            return respData;
//           if (this.isResponseSignatureValid(respData)) {
//               return respData;
//           }
//           else {
//               throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr));
//           }
        }

至此,提现接口完成。。

原文地址:https://www.cnblogs.com/w53064/p/11120492.html

时间: 2024-10-09 06:13:23

pringboot整合微信支付sdk的相关文章

关于微店整合微信支付时出现的的各种问题的记录 php版

由于公司项目的需要,需要在项目里整合微信支付,公司原有的项目中已有老版本的支付功能,在此不作讨论.我需要作的就是加入新版本的支付功能 让项目里可以支持新老两种版本的功能.在微信官方下载到了新版支付的php版sdk,看到 WxPay.ub.config.php,SDKRuntimeException.php, WxPayPubHelper.php 三个文件.我需要改造的就是WxPayPubHelper.php这个文件,因为这个文件现在是单用户配置的,所以我要让它变成多用户的,在改造的过程中遇到了几

开源微信支付SDK

应该有一年多没在博客园上写文章了,毕竟是一个记录自己技术成长的平台,没能将写博客长期坚持下来,说起来也是挺惭愧的.对于自己的近况而言,确实平常加班也比较多,时间会比较压缩,所以到后来博客也基本停止了更新. 现在自己会更多地会专注于做php这一块,因为公司决定转向切换技术平台,所以我也一起拥抱了变化.其实我刚开始也犹豫过,觉得转技术方向会比较折腾,容易陷入学得杂而浅的境地.不过在经历了这段技术转型的日子,我逐渐地打消了这个想法,因为在做php的这段时间内,确实让我开阔了视野(开源社区的力量确实很强

微信支付SDK开发教程

今天研究了一下微信的SDK开发教程,下面我就简单的把步骤介绍下,希望对你们有所帮助 现在的支付都是使用V3接口的,2014年9月之前都是使用V2接口,现在我就介绍下V2和V3接口的申请方法吧 一.微信支付v2 1. 使用网页授权接口 使用网页授权接口获取用户的基本信息. [微信公众号]OAuth2.0授权.pdf点击下载 2. 使用共享收货地址控件 使用共享收货地址控件,获取用户在微信的收货地址.[微信公众号支付]收货地址共享接口文档V1.6.pdf点击下载 3. 使用公众号发起支付请求 使用J

微信支付SDK存在XXE漏洞

微信支付SDK存在XXE漏洞 漏洞信息来源:http://seclists.org/fulldisclosure/2018/Jul/3https://xz.aliyun.com/t/2426 0x00受影响版本: JAVA SDK,WxPayAPI_JAVA_v3,建议使用了该版本的公司进行异常支付排查.微信在JAVA版本的SDK中提供callback回调功能,用来帮助商家接收异步付款结果,该接口接受XML格式的数据,×××者可以构造恶意的回调数据(XML格式)来窃取商家服务器上的任何信息.一旦

iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修改就先要跑起来啊. 根据错误提示,判断是libwechatsdk.a里面没有这个方法.顺藤摸瓜按照下面的步骤开始了解决旅途. 阶段一 1. 手动添加了微信支付SDK源码到工程 2. pod 'UMengUShare/Social/WeChat'添加了微信分享, 编译时报错如下: 说明导入的微信支付S

2019刘老师教你用springboot2.x开发整合微信支付的线上教育平台带源码送springboot2.x零基础入门到高级实战教程

第一部分:springboot2.x零基础入门到高级实战教程一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 3.快速创建SpringBoot2.x应用之手工创建web应用 简介:使用Maven手工创建SpringBoot2.x应用 4

thinkphp整合微信支付

先上效果图:我要告诉你我这一篇文章写的是微信支付之中的(普通商户而非服务商商户的统一下单JSPI)微信支付: 其实自己整合SDK失败了,用了一个博客博主整合的代码,在这里写一下笔记: 前面准备: 1.微信公众号: 独特的appid.appscrect.接口权限之中设置可以获取用户ID信息权限的域名(每个用户对于不同公众都会有一个特有ID,通过这个ID获取用户微信账号基本信息.详情看微信开发者文档).在微信支付按钮出设置微信支付授权目录(写到发起请求的控制器那一层).设置开发者微信账号为测试白名单

Unity3d接入微信支付sdk返回-1

背景:U3d导出安卓项目包之后,进行SDK的接入工作. 由于习惯性的右键->Run As->Android Application生成安卓包,导致没有对apk进行签名.App装入之后,微信支付老是返回-1,翻来覆去的找问题终于找到正确的操作流程: 之后,点击finish即可.

Android微信支付SDK开发

一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 2.创建应用 创建移动应用获取 AppID  AppSecret 要获取支付功能还需要开发者资质认证,300RMB/年的费用,貌似是开放平台中唯一要收费的- 3.AndroidMainfest文件修改 权限 <uses-permission