java开发Demo~微信扫码支付,java开发示例

微信支付 java 服务端demo (v3版本app支付 springMVC框架中) 由于微信官方没有app支付后台demo,前天公司要对接微信支付,经过这两天在网上找的资料以及结合官方文档,今天开发和测试终于顺利收尾,本篇文章仅包含微信app支付v3版本 java后台代码片段,andriod和ios请在官网查看 阅读详情

开发所需工具类


13467292-d2f5d2e2f101e0a4.png

开发所需jar

13467292-20daf04b418876ea.png

具体的代码不贴了,说明下PayConfigUtil中的参数


13467292-62e3bde25929f628.png

APP_ID和APP_SECRET在公众平台 

MCH_ID和API_KEY在商户平台,其中API_KEY是自己设置的,并不是自动生成的。

Controller

通过此方法,前往可以生成二维码的页面

//微信前往支付页面

    @RequestMapping(value = "towxPay")

    public ModelAndView towxPay(ModelMap map,HttpServletRequest request,String chapterId,String chapterName,String price) throws IOException{

        ModelAndView mav = new ModelAndView();

        mav.setViewName("jsp/pay/weixinpayma");

        HttpSession session = request.getSession();

        session.setAttribute("chapterId", chapterId);

        session.setAttribute("chapterName", chapterName);

        session.setAttribute("price", price);

        return mav;

    }

返回的页面如下

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

                <%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()

            + path + "/";

%>

Insert title here

   


p?https:index/payImg style="min-height:null;min-width:null;" width=null height=null />


   

    /* ajax轮回,不停的访问Controller,直到wxPayType=1时,付款成功 */

        var num = 0;

        $(function(){

            panduanWXPay();

        });

        function panduanWXPay(){

            $.post("<%=basePath%>index/panduanPay",function(data){

                var wxPayType = data.wxPayType;

                if(wxPayType==1){

                /* 成功 */

                    window.location.href='<%=basePath%>index/gouMai';

                }else if(wxPayType==0 && num!=400){

                    num++;

                    panduanWXPay();

                }else{

                    alert("支付超时");

                }

            });

        } 


payImg方法

//微信支付,生成二维码

    @RequestMapping(value = "payImg")

    public  void payImg(HttpServletRequest request, HttpServletResponse response) throws IOException{

        HttpSession session = request.getSession();

        String chapterName=(String)session.getAttribute("chapterName");

        String price=(String)session.getAttribute("price");

        int defaultWidthAndHeight=200;

        String nonce_str = PayCommonUtil.getNonce_str();

        long time_stamp = System.currentTimeMillis() / 1000;

        String product_id = chapterName+"*"+price;//订单名字和价钱,拼到了一起,后面用到的时候再拆

        String key = PayConfigUtil.API_KEY; // key

        SortedMap packageParams = new TreeMap();

        packageParams.put("appid", PayConfigUtil.APP_ID);

        packageParams.put("mch_id", PayConfigUtil.MCH_ID);

        packageParams.put("time_stamp", String.valueOf(time_stamp));

        packageParams.put("nonce_str", nonce_str);

        packageParams.put("product_id", product_id);

//      packageParams.put("chapterId", chapterId);

//      packageParams.put("price", price);

        String sign = PayCommonUtil.createSign("UTF-8", packageParams,key);//MD5哈希

        packageParams.put("sign", sign);

        //生成参数

        String str = ToUrlParams(packageParams);

        String payurl = "weixin://wxpay/bizpayurl?" + str;

//      logger.info("payurl:"+payurl);

        //生成二维码

        Map  hints=new HashMap();

        // 指定纠错等级 

        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); 

        // 指定编码格式 

        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); 

        hints.put(EncodeHintType.MARGIN, 1);

        try {

            BitMatrix bitMatrix = new MultiFormatWriter().encode(payurl,BarcodeFormat.QR_CODE, defaultWidthAndHeight, defaultWidthAndHeight, hints);

            OutputStream out = response.getOutputStream();

            MatrixToImageWriter.writeToStream(bitMatrix, "png", out);//输出二维码

            out.flush();

            out.close();

        } catch (WriterException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

public String ToUrlParams(SortedMap packageParams){

        //实际可以不排序

        StringBuffer sb = new StringBuffer(); 

        Set es = packageParams.entrySet(); 

        Iterator it = es.iterator(); 

        while (it.hasNext()) { 

            Map.Entry entry = (Map.Entry) it.next(); 

            String k = (String) entry.getKey(); 

            String v = (String) entry.getValue(); 

            if (null != v && !"".equals(v)) { 

                sb.append(k + "=" + v + "&"); 

            } 

        }

        sb.deleteCharAt(sb.length()-1);//删掉最后一个&

        return sb.toString();

    }

扫码时触动此方法,会在手机端显示付款信息

要将此方法的路径配置到回调url里,微信公众平台–>微信支付–>开发配置 


13467292-94d27201013436a7.png

//微信扫码的时候,触发此方法

    @RequestMapping(value = "Re_notify")

    public void Re_notify(HttpServletRequest request, HttpServletResponse response) throws IOException{

        HttpSession session = request.getSession();

        String chapterId=(String)session.getAttribute("chapterId");

        String chapterName=(String)session.getAttribute("chapterName");

        String price=(String)session.getAttribute("price");

        System.out.println(chapterId+":"+chapterName+":"+price);

        // 读取xml

                InputStream inputStream;

                StringBuffer sb = new StringBuffer();

                inputStream = request.getInputStream();

                String s;

                BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

                while ((s = in.readLine()) != null) {

                    sb.append(s);

                }

                in.close();

                inputStream.close();

                SortedMap packageParams = PayCommonUtil.xmlConvertToMap(sb.toString());

//              logger.info(packageParams);

                // 账号信息

                String key = PayConfigUtil.API_KEY; // key

                String resXml="";//反馈给微信服务器

                // 验签

                if (PayCommonUtil.isTenpaySign("UTF-8", packageParams, key)) {

                    //appid openid mch_id is_subscribe nonce_str product_id sign

                    //统一下单

                    String openid = (String)packageParams.get("openid");

                    String product_id = (String)packageParams.get("product_id");

                    //解析product_id,计算价格等

                    String thePricce = product_id.substring(product_id.lastIndexOf("*")+1);

                    String newProductId = product_id.substring(0, product_id.indexOf("*"));

                    String out_trade_no = String.valueOf(System.currentTimeMillis()); // 订单号 

                    String order_price = thePricce; // 价格"1"  注意:价格的单位是分 

                    String body = newProductId;  // 商品名称product_id  这里设置为product_id

                    String attach = "十倍课"; //附加数据

                    String nonce_str0 = PayCommonUtil.getNonce_str();

                    // 获取发起电脑 ip 

                    String spbill_create_ip = PayConfigUtil.CREATE_IP;   

                    String trade_type = "NATIVE";

                    SortedMap unifiedParams = new TreeMap(); 

                    unifiedParams.put("appid", PayConfigUtil.APP_ID); // 必须

                    unifiedParams.put("mch_id", PayConfigUtil.MCH_ID); // 必须

                    unifiedParams.put("out_trade_no", out_trade_no); // 必须

                    unifiedParams.put("product_id", product_id);

                    unifiedParams.put("body", body); // 必须

                    unifiedParams.put("attach", attach);

                    unifiedParams.put("total_fee", order_price);  // 必须

                    unifiedParams.put("nonce_str", nonce_str0);  // 必须

                    unifiedParams.put("spbill_create_ip", spbill_create_ip); // 必须

                    unifiedParams.put("trade_type", trade_type); // 必须 

                    unifiedParams.put("openid", openid); 

                    unifiedParams.put("notify_url", PayConfigUtil.NOTIFY_URL);//异步通知url

                    String sign0 = PayCommonUtil.createSign("UTF-8", unifiedParams,key); 

                    unifiedParams.put("sign", sign0); //签名

                    String requestXML = PayCommonUtil.getRequestXml(unifiedParams); 

//                  logger.info(requestXML);

                    //统一下单接口

                    String rXml = HttpUtil.postData(PayConfigUtil.UFDODER_URL, requestXML); 

                    //统一下单响应

                    SortedMap reParams = PayCommonUtil.xmlConvertToMap(rXml);

//                  logger.info(reParams);

                    //验签

                    if (PayCommonUtil.isTenpaySign("UTF-8", reParams, key)) {

                        // 统一下单返回的参数

                        String prepay_id = (String)reParams.get("prepay_id");//交易会话标识  2小时内有效

                        String nonce_str1 = PayCommonUtil.getNonce_str();

                        SortedMap resParams = new TreeMap(); 

                        resParams.put("return_code", "SUCCESS"); // 必须

                        resParams.put("return_msg", "OK");

                        resParams.put("appid", PayConfigUtil.APP_ID); // 必须

                        resParams.put("mch_id", PayConfigUtil.MCH_ID);

                        resParams.put("nonce_str", nonce_str1); // 必须

                        resParams.put("prepay_id", prepay_id); // 必须

                        resParams.put("result_code", "SUCCESS"); // 必须

                        resParams.put("err_code_des", "OK");

                        String sign1 = PayCommonUtil.createSign("UTF-8", resParams,key); 

                        resParams.put("sign", sign1); //签名

                        resXml = PayCommonUtil.getRequestXml(resParams);

//                      logger.info(resXml);

                    }else{

//                      logger.info("签名验证错误");

                        resXml = "" + "" 

                                + "" + " ";

                    }

                }else{

//                  logger.info("签名验证错误");

                    resXml = "" + "" 

                            + "" + " ";

                }

                //------------------------------ 

                //处理业务完毕 

                //------------------------------ 

                BufferedOutputStream out = new BufferedOutputStream( 

                        response.getOutputStream()); 

                out.write(resXml.getBytes()); 

                out.flush(); 

                out.close(); 

    }

微信支付成功时访问的方法

密码错误等未支付成功的情况下,不会访问。 

此路径是PayConfigUtil中配置的

int wxPayType = 0;

    //微信扫码支付回调

    @RequestMapping(value = "Notify1")

    public void Notify1(HttpServletRequest request, HttpServletResponse response) throws IOException{

        InputStream inputStream;

        StringBuffer sb = new StringBuffer();

        inputStream = request.getInputStream();

        String s;

        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

        while ((s = in.readLine()) != null) {

            sb.append(s);

        }

        in.close();

        inputStream.close();

        SortedMap packageParams = PayCommonUtil.xmlConvertToMap(sb.toString());

//      logger.info(packageParams);

        // 账号信息

        String key = PayConfigUtil.API_KEY; // key

        String resXml = ""; // 反馈给微信服务器

        // 判断签名是否正确

        if (PayCommonUtil.isTenpaySign("UTF-8", packageParams, key)) {

            // ------------------------------

            // 处理业务开始

            // ------------------------------

            if ("SUCCESS".equals((String) packageParams.get("result_code"))) {

                // 这里是支付成功

                ////////// 执行自己的业务逻辑////////////////

                String mch_id = (String) packageParams.get("mch_id");

                String openid = (String) packageParams.get("openid");

                String is_subscribe = (String) packageParams.get("is_subscribe");

                String out_trade_no = (String) packageParams.get("out_trade_no");

                String total_fee = (String) packageParams.get("total_fee");

//// 将用于标记是否成功的全局变量wxPayType设置为1,ajax轮回时,可以获取到其变化,从而进行页面跳转////

                wxPayType=1;

                System.out.println("33333333333333333333333333333:"+wxPayType);

//          "支付成功"

// 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.

                resXml = "" + ""

                        + "" + " ";

            } else {

//              logger.info("支付失败,错误信息:" + packageParams.get("err_code"));

                resXml = "" + ""

                        + "" + " ";

            }

        } else {

//          logger.info("签名验证错误");

            resXml = "" + "" 

                    + "" + " ";

        }

        // ------------------------------

        // 处理业务完毕

        // ------------------------------

        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());

        out.write(resXml.getBytes());

        out.flush();

        out.close();

    }

ajax不停轮回,判断是否登录成功的方法

@RequestMapping(value = "panduanPay")

        @ResponseBody

        public Map panduanPay(HttpServletRequest request) throws IOException{

            Map map = new HashMap();

            try {

                Thread.sleep(500);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            //给页面返回wxPayType值,成功是返回的是1;还未支付成功,返回的是初始值0

            map.put("wxPayType",wxPayType);

            return map;

        }

成功后页面跳转的方法

//购买成功,存入购买表中

    @RequestMapping(value="gouMai")

    @ResponseBody

    public ModelAndView gouMai(HttpServletRequest req,String a,String urlName,String couName,ModelMap map){

        ModelAndView mav = new ModelAndView();

        Map mapp1 = new HashMap();

//      SysUserTab login_user = sysuserService.getSysUserById(userId);

        HttpSession session = req.getSession();

        SysUserTab login_user1 = (SysUserTab) session.getAttribute("login_user");

        String userId = login_user1.getUserId();

//      session.setAttribute("login_user", login_user);

        String chapterId = (String) session.getAttribute("chapterId");

        mapp1.put("userId", userId);

        mapp1.put("chapterId", chapterId);

        int num = sysBuyService.getBuyCount(mapp1);

        if(num==0){

            mapp1.put("buyId", UUID.randomUUID().toString().replace("-", ""));

            sysBuyService.insertBuy(mapp1);

        }

Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费学习加群:835638062 点击链接加入群聊【Java高级架构】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

S32K3的STCU2模块详解:从硬件FSM到MCAL配置,搞懂BIST在线测试全流程 本文深入解析S32K3系列MCU的STCU2模块,从硬件FSM架构到MCAL配置,详细讲解BIST在线测试全流程。通过分区的安全策略和实战代码示例,帮助开发者掌握汽车电子系统中的功能安全实现,提升系统可靠性和安全性。 阅读详情

相关推荐

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2152

微信支付java版v2.0_付款码支付

微信支付系列课程将讲解“刷卡支付”、“扫码支付”、“公众号支付”、“现金红包”、“企业付款”。 针对每个支付技术点课程给出“1分钟部署”和“详细讲解”的听课方式。 针对项目要求部署的,请同学认真学习“程序演示和开发流程” 针对系统学习微信支付技术点的,请认真学习“编程实现” “程序演示和开发流程”要求必须认真学习,“开发流程”讲的是微信支付开发、部署的重要信息。 学习有技术问题请qq2326321088 建议在学习微信支付的同学具有“微信服务号”和“微信企业号”的技术基础。

利用HFSS仿真优化圆极化微带天线的耦合馈电设计

本文深入探讨了利用HFSS仿真软件优化圆极化微带天线性能的关键方法。通过对比传统直接馈电与耦合馈电方式,详细阐述了耦合馈电在提升阻抗匹配、改善轴比带宽及增强设计鲁棒性方面的显著优势。文章结合FR4板材的实战案例,逐步演示了在HFSS中建立模型、进行参数扫描与圆极化性能优化的完整流程,为设计高性能、高纯度的圆极化天线提供了实用指南。

weixin_29233333的博客 547

Java实现微信小程序V3支付 (完整demo)

Java实现微信小程序V3支付 (完整demo)

weixin_43652507的博客 4749

【一文搞懂几种常用推荐算法】

协同过滤:适合用户-物品交互数据丰富的场景。矩阵分解:能处理稀疏数据,适合显式评分预测。基于内容:依赖物品特征,解决冷启动问题。NMF:适用于非负数据(如点击率、购买记录)。根据实际需求选择算法,或结合多种方法构建混合推荐系统。

专注技术的博主 2642

Python+OpenCV实现游戏自动刷怪脚本(附完整代码)

本文详细介绍了如何使用Python和OpenCV开发游戏自动刷怪脚本,涵盖环境搭建、图像识别、行为决策引擎及反检测优化等关键技术。通过完整的代码示例,帮助开发者实现从简单脚本到智能自动化系统的升级,提升游戏效率。

weixin_29032489的博客 524

微信支付-java实现微信支付-后端篇

四 Java 实现微信支付 — 后端篇 技术栈 Spring boot java XML (微信在http协议中数据传输方案) MD5 签名 微信支付术语 openid (OpenID是公众号一对一对应用户身份的标识) app_id (公众号id,登录微信公众号–开发–基本配置中获得;) key (收款商户后台进行配置,登录微信商户平台–账户中心–API安全-设置秘钥,设...

王佳楠的专栏 2万+

基于BQ24610的24V电池充电板

转自我的博客 本文的主要目的在于传播基本的阅读datasheet的能力,以及PCB设计需要注意的基本问题。 本次需要设计的是24V动力锂电池充电电路。 原理图设计 参考官方参考电路 为了快速设计电路,自然是参考官方参考电路,选择Typical Application。 做细微的参数调整 由于我们的需求是给24V的电池充电,所以需要稍微修改一下原理图,接下来需...

greedyhao的博客 1万+

[微信 支付demo ]

欲买桂花同载酒,终不似,少年游

汤圆的博客 1677

onnxruntime-gpu版本选择与CUDA环境配置实战指南

本文是onnxruntime-gpu版本选择与CUDA环境配置的实战指南。针对AI模型部署中常见的GPU无法调用问题,核心在于确保onnxruntime-gpu版本与系统CUDA Toolkit版本严格匹配。文章详细讲解了如何精准确定CUDA版本、查找官方对应关系、执行正确安装命令,并通过完整测试脚本验证GPU是否成功启用,最后提供了常见问题排查与生产环境调优建议。

weixin_29164091的博客 525

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

java开发Demo~微信扫码支付

原 java开发Demo~微信扫码支付,java开发示例 2018年01月02日 19:11:51 wei_aiwan 阅读数:10296 &lt;span class="tags-box artic-tag-box"&gt; &lt;s...

lida1234567的博客 526

一文整理深度学习【深度学习linux的docker+pytorch+cuda+nvidia-docker+vscode配置】

docker+pytorch+cuda+nvidia-docker+vscode

LetsonH的博客 1337

Java微信支付全教程demo【公众号支付】

整个执行流程 是 : 微信点击支付按钮——》 发送ajax到支付请求控制器——》 返回支付参数——》 用支付参数,调用微信内嵌的掉起支付js方法,发起支付——》 支付结果同步返回结果——》 支付结果异步发送到后台回调控制器做结果处理

jiwengjian123的专栏 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java 后端微信支付demo

一、导入微信SDK 二、在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三、实现微信的WXPayConfig接口 package com.ieou.demo.common; import com.github.wxpay.sdk.WXPayConfig; import org.apache.commons.io.IOUti...

xmt1139057136的专栏 2569

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【微信支付】【java】Springboot对接开发微信支付

本文章是介绍java对接微信支付,包括微信预下单、支付、退款等等。

主要从事JAVA开发,目前是优快云博客Java领域新星创作者、阿里云博客专家、担任公司研发经理、技术负责人等。热爱编程,喜欢在Python、C、C++领域探索。 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java开发微信付款码支付

@[clownss] java开发微信付款码支付 微信支付–付款码支付 写在前面的话,各位大佬,晚上好!今儿是小弟第一次发表博客,我是一名刚入行的程序员,写的不好或是不对的地方,希望各位见谅。还请各位大佬能够指导,给予小弟一份帮助。谢谢大家!今天写的是我最近研究的微信付款码支付的一个小demo。 官方地址:https://pay.weixin.qq.com/wiki/doc/api/index....

weixin_42991261的博客 8899

Java微信小程序的支付对接demo

一、开发前必须有如下东西: appId(小程序分配) 小程序密钥(小程序配置界面获取) 商户号 api密钥(商家后台自己设置) 二、这是微信小程序支付的流程图三、Controller层, /** * 微信支付 */ @RequestMapping(value = "wxOrderId", method = RequestMethod.POST) public ResponseVos doUnifiedOrder() throws Exception {

于双瑜的博客 1228

【微信支付】小案例,Java版

上手一个小案例,实现Java版本的微信支付。第一步: 从微信平台下载微信支付demo。 链接: 到官方下载 这里我们下载Java版的。 注意微信提供的demo是myclipse版本的。 我们要用myclipse打开。 第二步:把demo导入到myclipse中去。 第三步:配置以下代码。 (1) MyConfig.java (2) WXPayExample.java (3) 在src/main/java的代码窗口添加一个新文件MatrixToImageWriter.java (4) 在WebRoot下

e5132712的博客 1669

APP微信支付java demo

1、导入maven依赖 <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version> </dependency> 2、调用官方SDK获取预支付订单等参数(注意生签名的参数顺序不能乱,如果生成的签名对但是报签名错误可以把密钥全改为大写试试

qq_38410795冰淇淋的博客 1042

java微信支付demo说明_java 微信支付 demo

首先我只想说微信能把文档写清楚点吗?超级无敌巨坑php首先进入html微信开发者平台https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN点击打开连接,java而后找到android微信APP支付接入商户服务中心https://open.weixin.qq.com/cgi-bin/showdocument?ac...

weixin_33169898的博客 380

Java接入微信支付超级详细教程【保姆级】

本文介绍了“微信二维码付款”的代码。

qq_37992901的博客 2万+

Java微信小程序支付Demo

一个关于Java微信小程序支付的demo基础包 SpringBoot,xStream,hutool工具类,lombok,自定义异常模块XStreamhutool 工具类 基础包 SpringBoot,xStream,hutool工具类,lombok,自定义异常模块 XStream <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstre

weixin_43568848的博客 1677

Java微信扫码支付模式二Demo ,整合官网直接运行版本

场景介绍 扫码支付模式二,用于web网站。用户点击支付后,根据商品生成的二维码,用户扫码完成支付,手机提示支付成功,微信支付系统把交易结果发送到回调接口中。

神尐破 961

JAVA富友支付微信H5+小程序支付接口demo代码实战

JAVA富友支付微信H5+小程序支付接口demo代码实战1、回调请参考文档,由于代码相对简单,获取富友支付的参数。2、回调在本地调试,需要安装内网穿透工具,使用NATCROSS内网穿透工具,可以实现回调本地调试。

java web 3302
上一篇: 阿里分布式系统性能提升10000倍的技术揭秘 ——视频解析
下一篇: Redis主从复制看这篇就够了
普通网友
博客等级 码龄8年 55粉丝 197原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值