微信小程序支付-java对接微信

这篇具有很好参考价值的文章主要介绍了微信小程序支付-java对接微信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一共是两个方法:

一个方法后台生成预支付订单,得到预支付交易会话标识prepay_id,传给前端,让前端调起小程序支付;

一个是支付回调

目录

一、生成预支付订单 

注意:

二、 支付回调


一、生成预支付订单 

        封装参数向微信发送生成预支付交易单请求,微信会返回一个prepay_id,再将prepay_id与前段调起小程序支付所需参数一起给前端。

SortedMap<String,String> parameters = new TreeMap<>();

//先调用该接口在微信支付服务后台生成预支付交易单,获得prepay_id,用于调起支付
parameters.put("appid", appid);
parameters.put("mch_id", mchId);
parameters.put("openid", openid);
parameters.put("nonce_str", ToolUtil.getRandomString(32));//随机字符串
parameters.put("body", BODY);//商品信息
parameters.put("out_trade_no", orderSn);// 系统内部订单号,自生成
parameters.put("total_fee",totalFee);//真实金额,一定要整数
parameters.put("spbill_create_ip",spbillCreateIp);//调用微信支付API的机器IP
parameters.put("notify_url",notifyUrl);//通知地址
parameters.put("trade_type",TRADE_TYPE);//小程序固定取值:JSAPI

//将所有参数一起生成sign签名,一次签名
String sign = WeixinPayUtil.createSign(parameters,key);//MD5
parameters.put("sign",sign);

//参数封装完后,转xml格式,发起https请求,POST请求
String xml = WeixinPayUtil.getRequestXml(parameters);
Result result = WeixinPayUtil.sendRequest(xml, WeixinPayUtil.UNIFIED_ORDER_URL, HttpMethod.POST);

//获取请求返回的值prepay_id,加上前段调起支付API所需参数,返回给前端
Map<String, String> map  = (Map<String, String>) result.getData();
SortedMap<String,String> resultMap = new TreeMap<>();
resultMap.put("appId",appid);
resultMap.put("timeStamp",String.valueOf(System.currentTimeMillis()/1000));
resultMap.put("nonceStr", ToolUtil.getRandomString(32));//随机字符串
resultMap.put("package","prepay_id="+map.get("prepay_id"));//固定拼接格式
resultMap.put("signType","MD5");//签名类型MD5
//拼接key值,用所有参数生成sign签名并转MD5,二次签名,这里跟官方文档多拼接了一个key值,官方文档没写,但是需要
String paySign = WeixinPayUtil.createMiniSign(resultMap,key);
resultMap.put("paySign",paySign);
resultMap.put("orderSn", orderSn);
return ResultUtil.success(resultMap);

 发送http请求,老方法,自行选择是否使用

/**
     * 发送http请求
     * @param xml
     * @param url
     * @param method
     * @return
     */
    public static Result sendRequest(String xml, String url, HttpMethod method){
        YZLHttpClient client = YZLHttpClientFactory.create(YZLHttpClientFactory.HttpType.Mine);
        String result = client.sendRequestWithXml(url,xml,method);
        Map<String,String> map;
        try {
            map = WeixinPayUtil.doXMLParse(result);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (JDOMException e) {
            throw new RuntimeException(e);
        }
        if(! map.get("return_code").equals("SUCCESS"))
            return ResultUtil.error(ErrorCodeEnum.FAILED);
        return ResultUtil.success(map);
    }

 参数转xml工具类,老方法,自行选择是否使用

 /**
     * 组装xml
     * @param params
     * @return
     */
    public static String getRequestXml(SortedMap<String,String> params){
        StringBuffer sb = new StringBuffer();
        sb.append("<mapping>");
        Set es = params.entrySet();
        Iterator it = es.iterator();
        while (it.hasNext()){
            Map.Entry entry = (Map.Entry)it.next();
            String key = (String) entry.getKey();
            String value = entry.getValue().toString();
            if("attach".equalsIgnoreCase(key) || "body".equalsIgnoreCase(key)||"sign".equalsIgnoreCase(key)){
                sb.append("<"+key+">"+"<![CDATA["+value+"]]></"+key+">");
            }else {
                sb.append("<"+key+">"+value+"</"+key+">");
            }
        }
        sb.append("</mapping>");
        return sb.toString();
    }

 sign算法,这里跟官方文档多拼接了一个key值,官方文档没写,但是需要

/**
     * 微信小程序支付签名算法sign
     * @param parameters
     * @return
     */
    public static String createMiniSign(SortedMap<String,String> parameters, String apiKey){
        StringBuffer sb = new StringBuffer();
        Set<Map.Entry<String, String>> es = parameters.entrySet();

        for(Map.Entry<String, String> entry : es){
            String k = entry.getKey();
            String value = entry.getValue();
            if(value != null && !"".equals(value) && !"sign".equals(k) && !"key".equals(k)){
                sb.append(k+"="+value+"&");
            }
        }
        sb.append("key="+apiKey);
        String sign = MD5Util.encrypt(sb.toString()).toUpperCase();
        return sign;
    }

注意:

1.生成第一次签名,参数封装key值用下划线,生成二次签名参数封装key值要用驼峰命名 

2.生成二次签名的参数数量一定要与官方接口文档保持一致,最好顺序也保持一致

二、 支付回调

我用的是支付完成后查询订单方法,没用异步回调地址文章来源地址https://www.toymoban.com/news/detail-520476.html

SortedMap<String,String> parameters = new TreeMap<>();
        parameters.put("appid", appid);
        parameters.put("mch_id", mchId);
        parameters.put("out_trade_no", orderSn);// 系统内部订单号
        parameters.put("nonce_str", ToolUtil.getRandomString(32));
        String sign = WeixinPayUtil.createSign(parameters,key);
        parameters.put("sign",sign);
        String xml = WeixinPayUtil.getRequestXml(parameters);
        Result result = WeixinPayUtil.sendRequest(xml, WeixinPayUtil.ORDER_QUERY_URL, HttpMethod.POST);
        Map<String, String> map  = (Map<String, String>) result.getData();
        if ( map.get("result_code").equals("SUCCESS")){
            //回调成功后的业务逻辑
        }

到了这里,关于微信小程序支付-java对接微信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序支付踩坑notify_url(支付回调)

    最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问。 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊。 把回调地址复制出来到浏览器上面,外网也是可以访问的啊。 然后我再分析,为什么以前公众号支付都没有出现这种类型的错

    2024年02月11日
    浏览(46)
  • 微信小程序对接微信支付详细教程

    小程序 微信支付官方文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_11index=2 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 前提 在进行对接微信支付之前,我们首先需要将以下几点准备好: 申请APPID 申请商户号 小程序开通微信支付,绑定已经申请好的商户号。

    2024年02月09日
    浏览(49)
  • 微信小程序对接微信支付所遇问题合集

    1. 后端使用微信官方sdk会简单很多,可以看看在第五个大标题上。 2. 相关文档汇总:         1、WxJava - MiniApp Java SDK 4.6.0 API         2、wechatpay-java/README.md at main · wechatpay-apiv3/wechatpay-java · GitHub         3、网络 | 微信开放文档         4、开发指引 - JSAPI支付 | 微信支付商

    2024年04月25日
    浏览(56)
  • SpringBoot对接微信小程序支付功能开发(一,下单功能)

    1,接入前准备: 接入模式选择直连模式; 申请小程序,得到APPID,并开通微信支付; 申请微信商户号,得到mchid,并绑定APPID; 配置商户API key,下载并配置商户证书,根据微信官方文档操作:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml 上面都配置完之后会得到:小

    2024年02月10日
    浏览(63)
  • 微信支付-超详细java开发-小程序对接

    本文适用于有一定基础的开发者,简单易通。后台用的的是java,我用的是springBoot,其它框架基本同理,前端就是一个简单的demo。微信官方提供了V2和V3两种方式,本文基于V2版支付开发(后续更新V3)。V2和V3版本区别 1.思路介绍 本次以微信小程序开发为例,如果自己想要玩一

    2024年02月09日
    浏览(59)
  • 2000套微信微信小程序源码+抖音微信小程序源码附开源代码

    授权微信小程序SDK(authing-wxapp-sdk)适用于微信微信小程序(打开新窗口)基于微信微信小程序环境。可以使用微信微信小程序源码中的所有方法,比如Get,修改用户信息,添加用户自定义字段等等。专门用于微信小程序环境通过微信获取用户手机号、使用微信授权登录、微

    2024年02月01日
    浏览(53)
  • Python对接微信小程序V3接口进行支付,并使用uwsgi+nginx+django进行https部署

    网上找了很多教程,但是很乱很杂,并且教程资源很少且说的详细。这里就记录一下分享给大家 共分为以下几个步骤: 目录 一、开始前准备信息 二、使用前端code获取用户的openid 三、对接小程序v3接口下单 四、小程序支付的回调 五、安装并启动uwsgi 六、安装并启动nginx 七、

    2024年02月12日
    浏览(44)
  • java微信支付v3系列——5.微信支付成功回调

    java微信支付v3系列——1.微信支付准备工作 java微信支付v3系列——2.微信支付基本配置 java微信支付v3系列——3.订单创建准备操作 java微信支付v3系列——4.创建订单的封装及使用 java微信支付v3系列——5.微信支付成功回调 java微信支付v3系列——6.微信支付查询订单API java微信支

    2024年01月17日
    浏览(44)
  • Java实现微信支付v3的支付回调

    以前都是自己手搓api的, 现在有轮子了, 尝试记录一下如何使用 我的做法是首先打开v3的代码仓库, 直接进去看看他们的文档, 可以看到这么一坨东西 开发前准备 2. 先引入maven 初始化商户配置 先从请求头中获取构建RequestParam需要的参数 初始化解析器 进行验签, 解密并转换成

    2024年02月12日
    浏览(53)
  • 【微信支付】java-微信小程序支付-V3接口

    最开始需要在微信支付的官网注册一个商户; 在管理页面中申请关联小程序,通过小程序的 appid 进行关联;商户号和appid之间是多对多的关系 进入微信公众平台,功能-微信支付中确认关联 具体流程请浏览官方文档:接入前准备-小程序支付 | 微信支付商户平台文档中心 流程走

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包