java微信支付小程序

Java开发实现微信小程序支付(微信支付) 目录一、前期准备工作1.申请小程序开发者账号并认证2.小程序开通微信支付3.开发指引4.到官方下载Java的支付SDK二、代码实现1.开发流程:2.实现步骤2.1 下单,生成待支付订单2.2 调用微信统一下单2.3 小程序发起微信支付3.后台业务逻辑涉及到的工具类及参数封装类3.1 WeChatPayDto3.2 WeChatPayUtil:微信支付工具类3.3 WXPayUtil、WxPayNotifyResponse3.4 HttpUtils工具类3.5 ErrorCode:返回码3.6 request 阅读详情

前言
今天闲来无事,分享下微信小程序的支付接口的调用实现
由于之前做的是小程序在这里是说小程序的支付(PS:其他的也都差不多)
首先先认真阅读几遍官方文档
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1
关于小程序开通微信支付,,获取微信支付能力 文档都有的,在这里只说后台相关的问题;
注:关于小程序端必须用到https协议至于怎么转换可以去看我之前的文档
https://blog.youkuaiyun.com/CodeWu/article/details/91492024
在这里插入图片描述
1.通过code获取openId调用后台生成订单后调用支付统一下单后返回预付单信息
2.将预支付信息的数组进行签名加密返回支付参数
3.用户确定支付
4.同步调用(微信的) 鉴权调起支付 返回支付结果 并展现给用户
5.异步调用(后台) 返还支付结果 对订单进行状态的修改**

关于支付无非是这几个重要的参数
body 商品名称
spbill_create_ip 用户ip地址
out_trade_no 订单号
total_fee 总金额 需要转成字符串类型,否则后面的签名会失败
openId 用户openid

/**
     * 微信支付
     * @param body             商品名称
     * @param spbill_create_ip 用户ip地址
     * @param nexId            订单号
     * @param multiply         总金额
     * @param openId           用户openid
     * @return
     */
    public ResultMsg wxPays(String body, String spbill_create_ip, Long nexId, BigDecimal multiply, String openId) {
   
   
        try {
   
   
            //金额(微信端按照_分_来进行运算,金额传入之前*100)
            BigDecimal multiply1 = multiply.multiply(new BigDecimal("100"));

            String multiply2 = multiply1 + "";
            String[] split = multiply2.split("\\.");
            //生成的随机字符串
            String nonce_str = getRandomStringByLength(32);
            //商品名称
            //组装参数,用户生成统一下单接口的签名
            Map<String, String> packageParams = new HashMap<>();
            packageParams.put("appid", WechatConfig.appid);//小程序app_id
            packageParams.put("mch_id", WechatConfig.mch_id);//商户号id
            packageParams.put("nonce_str", nonce_str);//随机字符串
            packageParams.put("body", body);//商品名称
            packageParams.put("out_trade_no", nexId + "");//商户订单号,自己的订单ID
            packageParams.put("total_fee", split[0]);//支付金额,这边需要转成字符串类型,否则后面的签名会失败
            packageParams.put("spbill_create_ip", spbill_create_ip);//用户ip地址
            packageParams.put("notify_url", WechatConfig.notify_url);//支付成功后的回调地址
            packageParams.put("trade_type", WechatConfig.TRADETYPE);//支付方式
            packageParams.put("openid", openId + "");//用户的openID,自己获取

            String prestr = PayUtil.createLinkString(packageParams); // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
            //MD5运算生成签名,这里是第一次签名,用于调用统一下单接口
            String mysign = PayUtil.sign(prestr, WechatConfig.key, "utf-8").toUpperCase();

            //拼接统一下单接口使用的xml数据,要将上一步生成的签名一起拼接进去
            String xml = "<xml>" + "<appid>" + WechatConfig.appid + "</appid>"
                    + "<body><![CDATA[" + body + "]]></body>"
                    + "<mch_id>" + WechatConfig.mch_id + "</mch_id>"
                    + "<nonce_str>" + nonce_str + "</nonce_str>"
                    + "<notify_url>" + WechatConfig.notify_url + "</notify_url>"
                    + "<openid>" + openId + "</openid>"
                    + "<out_trade_no>" + nexId + "</out_trade_no>"
                    + "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>"
                    + "<total_fee>" + split[0] + "</total_fee>"//支付的金额,单位:分
                    + "<trade_type>" + WechatConfig.TRADETYPE + "</trade_type>"
                    + "<sign>" + mysign + "</sign>"
                    + "</xml>";

            //调用统一下单接口,并接受返回的结果
            String result = PayUtil.httpRequest(WechatConfig.pay_url, "POST", xml);
            // 将解析结果存储在HashMap中
            Map map = PayUtil.doXMLParse(result);

            String return_code = (String) map.get("return_code");//返回状态码
            String result_code = (String) map.get("result_code");//返回状态码

            Map<String, Object> response = new HashMap<String, Object>();//返回给小程序端需要的参数
            if (return_code.equals("SUCCESS") && return_code.equals(result_code)) {
   
   
                String prepay_id = (String) map.get("prepay_id");//返回的预付单信息
weixin-java-pay 班纳睿记录 首先这是一个很方便的开源项目,涵盖啦微信相关接口处理的大部分应用 本次是记录一个开发中遇到的问题,在此版本三方包中 微信H5中 &lt;dependency&gt; &lt;groupId&gt;com.github.binarywang&lt;/groupId&gt; &lt;artifactId&gt;weixin-java-pay&lt;/artifactId&gt; ... 阅读详情

相关推荐

java小程序完成微信支付

小程序微信支付

北极的企鹅 594

微信支付系统设计与实现:小程序前端+Java后台完整解决方案

本文还有配套的精品资源,点击获取 简介:微信支付是由腾讯推出的移动支付服务,广泛应用于在线购物和服务预订。本项目基于微信小程序和Java后台技术,完整实现了微信支付流程。小程序端负责用户交互和支付调用,Java后台基于Spring框架处理微信支付接口交互,包括统一下单、订单查询、支付回调等核心功能。项目涵盖HTTPS安全通信、签名验证、异常处理、沙箱测试等关键环节,是一套可运行、可部署的实战级微信支付解决方案,适合开发者快速掌握微信支付集成与落地。 在

weixin_35433448的博客 1583

使用 Java 和微信小程序实现的微信支付项目

使用 Java 和微信小程序实现的微信支付项目。它主要实现了以下功能: 微信小程序端:用户可以通过微信小程序扫码或者点击按钮来发起支付请求,以及查看支付结果和订单信息。 Java 服务端:服务端可以接收小程序端的支付请求,调用微信支付接口进行统一下单、查询订单、退款等操作,以及返回支付结果和订单信息给小程序端。 技术架构:项目使用了 Spring Boot 框架和 Maven 工具,使用了 MyBatis 和 MySQL 数据库,使用了 Log4j 和 Lombok 插件,使用了 HTTPS 协议和 RSA 签名算法。

YOLOv8中间特征层可视化

在通过观察这些特征,可以清楚地看到模型如何逐步将输入图像转化为有意义的表示。

weixin_45314480的博客 6894

保姆级教程:用Comsol Multiphysics仿真你的第一个SAW滤波器(含压电材料参数设置)

本文提供了一份详细的COMSOL Multiphysics教程,指导读者完成表面声波滤波器(SAW)的压电仿真全流程。从压电材料参数设置、叉指换能器建模到多物理场耦合分析,特别强调了实际应用中容易出错的细节和解决方案,帮助工程师快速掌握SAW滤波器仿真技术。

weixin_42665255的博客 593

通用策略04丨ORB魔改框架+自适应动量过滤模板

1、该策略第一次尝试使用低通滤波器进行行情择时过滤,同样该方法也可以用于主进场逻辑。2、出场逻辑适用于趋势、隔日波段、高低开等行情结构,对于日线级别长度K线一定积极作用,因此大家可以根据该逻辑进行反向品种筛选。3、在资金管理方面,我注意到一个问题,以往都是按照复权价格计算,但是资金却没有复权,所以这里实际上这里应该将价格除权计算,如下图所示:由于各平台差异,回测绩效以TBQ版本为准!!!本策略仅作学习、交流使用,实盘交易盈亏投资者个人负责!!!

松鼠宽客的博客 1178

保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码)

本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。

weixin_30555125的博客 405

嵌入式八股文-ARM

嵌入式八股文总结(ARM篇)-优快云博客现象:I2C死锁就是时钟线SCL一直处于高电平,数据线SDA一直处于低电平。从机拉低数据线SDA时(发送应答信号给主机时或发送数据0时)主机意外复位,主机复位后时钟线SCL就为高电平了,此时,SCL为高电平而SDA为低电平,主机就以为有其他设备占有了总线,而SCL为高电平时 数据位SDA不允许有变化,意思是:主机就一直等待时钟线SDA拉高,而从机就一直等待时钟线SCL拉高 就造成了死锁的现象。解决方法:1.选择带有复位功能的从设备,复位后SDA被拉高。

m0_63127436的博客 1262

一文了解ECU软件刷写的2种方法:Bootloader刷写和调试器刷写

分为刷写前、刷写中和刷写后三个阶段,如下示意:下面我们来详细了解一下Bootloader收到外部请求后开始刷写的三个阶段1)刷写前进行刷写的准备,一是确保刷写阶段总线通信的稳定性,二是避免刷写阶段出现非预期的故障,三是读取车辆数据供刷写前的一些检查等,如下所示:首先进行会话控制,通过功能寻址方式进入扩展会话模式,为后面的信息访问及其他指令做准备;然后检查刷写的前提条件,通过物理寻址方式发送历程控制请求。比如车确实处于静止状态,供电电压稳定等条件下才允许刷写;

menghuyouyou的博客 5789

面向口齿不清者的语音识别新突破:用大模型拯救“听不懂”的声音

面向构音障碍患者的语音识别新突破:大语言模型显著提升识别准确率 国际语音研究团队在Interspeech 2025发表最新成果,通过将大语言模型(LLM)融入语音识别系统,显著改善了对构音障碍(dysarthria)患者语音的识别效果。研究表明: 传统语音识别(如CTC模型)对构音障碍语音的词错误率(WER)高达50-54%,Whisper模型降至38-40%。 引入LLM解码器后,BART模型将WER降至30-32%,而Whisper-Vicuna组合更将WER降低至21-26%。 关键优势:LLM能有效

帅小柏的博客 272

EMC意义下的共模(Common Mode)和差模(Differential Mode)

在电子产品中,信号或电源通过两根导线传输。对比维度差模(DM)共模(CM)电流方向一进一出,相等相反同向、相等回流路径两根导线组成的闭合回路地或外壳EMC影响较小容易辐射干扰,重点治理类型定义有用信号干扰信号抑制方法常规滤波器、电感、电容共模电感、磁环、屏蔽、接地技术等。

weixin_43199439的博客 1250

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 分布式环境全局唯一id算法
下一篇: SpringBoot简单的定时任务
CodeWu
博客等级 码龄7年 12粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值