微信APP支付——Java服务端过坑之路

本文记录了Java服务端实现微信APP支付的过程,包括在微信开放平台和商户平台的申请,配置API秘钥,创建支付功能,以及SpringBoot项目中处理支付的步骤。特别强调了签名参数顺序和字符格式的重要性,分享了遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

前言:

APP微信支付对于新手来说真的是不知道从哪里下手,我们刚创建的开发团队自己想到的项目idea,需要用到支付功能,但是作为后台开发者的我来说,这次的坑真的是摔惨了!说起来都是微信文档的敷衍报错!文档描述及其简略,很多细节都没有说清楚,磨了几个星期才终于搞出来了。话不多说开始记坑!

开发步骤:

1、申请微信开放平台,申请过程不赘述,到“管理中心“——”移动应用”下创建自己的移动应用,获取开放平台分配的APPID。

创建完成后在应用上点击“查看”,申请支付功能,填写完整基本信息,再跟安卓端的同事拿到Android应用的应用签名和包名,填入开发信息中。

2、申请微信商户平台,申请过程同样不赘述,获取商户号——mch_id,在“api安全”——“api秘钥”中设置商户平台api秘钥,需要先在本机浏览器安装证书才能进行这些安全操作。

3、做完上述操作就开始进入代码正题(使用springboot搭建的maven项目)。

第一步:在配置文件application.yml中添加响应配置

wechat:
  pay:
    # 统一下单、生成预支付订单接口
    url: https://api.mch.weixin.qq.com/pay/unifiedorder
    # 微信支付回调接口
    notifyWeiXinPay: http://自己的域名/自己的请求路径
    # 微信开放平台appId
    appId: 修改成自己的appid
    # 商户平台api密钥
    apiSecret: 修改成自己的apiSecret
    # 商户号
    mchId: 修改成自己的商户号

并在pom文件中添加微信支付需要用到的依赖

        <!-- 微信支付依赖包 -->
        <dependency>
            <groupId>com.github.liyiorg</groupId>
            <artifactId>weixin-popular</artifactId>
            <version>2.8.5</version>
        </dependency>
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>

第二步:添加WeChatUtil类,需要在pom.xml文件中添加lombok依赖,用来使用@Data注解,省去每个都属性都要写getter和setter的繁琐。

@Component
@Data
public class WeChatUtil {
    @Value("${wechat.pay.url}")
    private String url;
    @Value("${wechat.pay.notifyWeiXinPay}")
    private String notifyWeiXinPay;
    @Value("${wechat.pay.refundUrl")
    private String refundUrl;
    @Value("${wechat.pay.businessPayUrl}")
    private String businessPayUrl;
    @Value("${wechat.pay.appId}")
    private String appId;
    @Value("${wechat.pay.apiSecret}")
    private String apiSecret;
    @Value("${wechat.pay.mchId}")
    private String mchId;
}

第三步:添加微信数据处理类——PayCommonUtil

@Component
public class PayCommonUtil {
    //微信参数配置
    public static String API_SECRET;

    @Value("${wechat.pay.apiSecret}")
    public void setApiKey(String apiSecret) {
        API_SECRET = apiSecret;
    }

    /**
     * @return a
     * @Author weigaosheng
     * @Description 请求xml组装
     * @Date 8:53 2019/2/2
     * @Param parameters
     **/
    public static String getRequestXml(SortedMap<String,Object> parameters){
        StringBuffer sb = new StringBuffer();
        sb.append("<xml>");
        Set es = parameters.entrySet();
        Iterator it = es.iterator();
        while(it.hasNext()) {
            Map.Entry entry = (Map.Entry)it.next();
            String key = (String)entry.getKey();
            String value = (String)entry.getValue();
            if ("attach".equalsIgnoreCase(key)||"body".equalsIgnoreCase(key)||"sign".equalsIgnoreCase(key)) {
                sb.append("<"+key+">"+"<![CDATA["+value+"]]></"+key+">");
            }else {
                sb.append("<"+key+">"+value+"</"+key+">");
            }
        }
        sb.append("</xml>");
        return sb.toString();
    }

    /**
     * @return a
     * @Author weigaosheng
     * @Description 生成签名
     * @Date 8:53 2019/2/2
     * @Param characterEncoding parameters
     **/
    public static String createSign(String characterEncoding,SortedMap<String,Object> parameters){
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序&#
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值