Java实现微信小程序支付前后端

微信小程序支付的前后端实现可以分为以下几个步骤:

  1. 微信开放平台注册账号并创建小程序应用。

  2. 在小程序后台设置支付相关信息,包括支付证书、支付回调地址等。

  3. 在小程序前端页面中调用wx.requestPayment函数,调起微信支付界面。

  4. 在小程序后端服务器中接收微信支付回调,验证支付结果并处理订单。

以下是前后端Java版实现的示例代码:

前端代码

wx.requestPayment({timeStamp: '', // 时间戳nonceStr: '', // 随机字符串package: '', // 统一下单接口返回的 prepay_id 参数值signType: 'MD5',paySign: '', // 签名success(res) {// 支付成功后的处理},fail(res) {// 支付失败后的处理}
});

后端代码

  1. 统一下单接口调用
/*** 微信统一下单* @param openid 用户openid* @param orderNo 订单号* @param amount 支付金额* @param ip 请求IP* @param notifyUrl 支付回调地址* @return 返回预支付订单号等信息*/
public static Map<String, String> unifiedorder(String openid, String orderNo, String amount, String ip, String notifyUrl) throws Exception {Map<String, String> result = new HashMap<>();// 组装请求参数Map<String, String> params = new HashMap<>();params.put("appid", APP_ID);params.put("mch_id", MCH_ID);params.put("nonce_str", WXPayUtil.generateNonceStr());params.put("body", "订单支付");params.put("out_trade_no", orderNo);params.put("total_fee", amount);params.put("spbill_create_ip", ip);params.put("notify_url", notifyUrl);params.put("trade_type", "JSAPI");params.put("openid", openid);String sign = WXPayUtil.generateSignature(params, KEY);params.put("sign", sign);// 发送请求并解析返回结果String xmlParams = WXPayUtil.mapToXml(params);String xmlResult = HttpUtil.post(UNIFIEDORDER_URL, xmlParams);Map<String, String> resultMap = WXPayUtil.xmlToMap(xmlResult);if ("SUCCESS".equals(resultMap.get("return_code"))) {if ("SUCCESS".equals(resultMap.get("result_code"))) {// 组装前端支付参数String prepay_id = resultMap.get("prepay_id");String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);String nonceStr = WXPayUtil.generateNonceStr();String signType = "MD5";Map<String, String> payParams = new HashMap<>();payParams.put("appId", APP_ID);payParams.put("timeStamp", timeStamp);payParams.put("nonceStr", nonceStr);payParams.put("package", "prepay_id=" + prepay_id);payParams.put("signType", signType);String paySign = WXPayUtil.generateSignature(payParams, KEY);result.put("timeStamp", timeStamp);result.put("nonceStr", nonceStr);result.put("package", "prepay_id=" + prepay_id);result.put("signType", signType);result.put("paySign", paySign);} else {// 统一下单失败result.put("errMsg", resultMap.get("err_code_des"));}} else {// 请求失败result.put("errMsg", resultMap.get("return_msg"));}return result;
}

  1. 支付结果回调处理
/*** 微信支付结果回调处理* @param request* @return*/
@RequestMapping(value = "/wxpay/notify", method = RequestMethod.POST)
@ResponseBody
public String notify(HttpServletRequest request) {String xmlResult = HttpUtil.getRequestBody(request);try {Map<String, String> resultMap = WXPayUtil.xmlToMap(xmlResult);if ("SUCCESS".equals(resultMap.get("return_code"))) {if ("SUCCESS".equals(resultMap.get("result_code"))) {// 验证签名if (WXPayUtil.isSignatureValid(resultMap, KEY)) {// 处理订单// ...return WXPayUtil.success();} else {return WXPayUtil.fail("签名验证失败");}} else {return WXPayUtil.fail(resultMap.get("err_code_des"));}} else {return WXPayUtil.fail(resultMap.get("return_msg"));}} catch (Exception e) {e.printStackTrace();return WXPayUtil.fail("系统错误");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GB/T 35379-2017 木门分类和通用技术要求

木门是指主要采用实木、人造板或其他木质复合材料制成的门框和门扇&#xff0c;根据表面材料的不同分为实木门&#xff0c;实木复合门和木质复合门&#xff0c;按照功能的不同分为防火木门、防盗木门、防潮木门、隔声木门等。 GB/T 35379-2017 木门检测项目 测试项目 测试标准…

【数电笔记】07-基本和复合逻辑运算

目录 说明&#xff1a; 基本逻辑运算 1. 与运算 &#xff08;and gate&#xff09; 2. 或运算 &#xff08;or gate&#xff09; 3. 非运算 &#xff08;not gate &#xff09; 复合逻辑运算 1. 与非运算&#xff08;nand&#xff09; 2. 或非运算&#xff08;nor&…

提高你的 Python 编程技巧:10个实用技巧

在日常的 Python 编程工作中&#xff0c;掌握一些实用的技巧可以提高你的效率和代码质量。本文将介绍 10 个实用的 Python 技巧&#xff0c;帮助你更好地利用 Python 进行开发。 1. enumerate 在循环中&#xff0c;有时我们需要同时获取元素的索引和值。这时可以使用 enumera…

用 taichi 写个软渲染器

用 taichi 写个软渲染器 What 起点是&#xff1a;可以 setup 一个画布&#xff0c;drawPixel(x, y, color)&#xff0c;然后渲染到 GUI 或者 .png目标是&#xff1a;加载 obj 模型文件和 .tga 贴图文件&#xff0c;并渲染出来使用 taichi 作为 SIMD 加速 backend复现一些 RTR…

leetcode:统计感冒序列的数目【数学题:组合数含逆元模版】

1. 题目截图 2.题目分析 需要把其分为多个段进行填充 长为k的段&#xff0c;从两端往中间填充的方案数有2 ** (k - 1)种 组合数就是选哪几个数填哪几个段即可 3.组合数含逆元模版 MOD 1_000_000_007 MX 100_000# 组合数模板 fac [0] * MX fac[0] 1 for i in range(1, MX…

伯俊软件CTO陈雨陆:R3全渠道业务中台的OceanBase落地实践

11 月 16 日&#xff0c;OceanBase 在京顺利举办 2023 年度发布会&#xff0c;正式宣布&#xff1a;将持续践行“一体化”产品战略&#xff0c;为关键业务负载打造一体化数据库。其中&#xff0c;“数字化转型升级实践专场”我们有幸邀请到伯俊软件 CTO 陈雨陆进行《OceanBase …

从Intel Cyclone10GX TransceiverPHY 高速收发器认识ATX PLL、FPLL、CMU PLL等PLL

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在使用Intel Cyclone10GX TransceiverPHY的过程中发现这个IP还是比较复杂的&#xff0c;特别是时钟系统&#xff0c;提到了多种PLL:ATX PLL、FPLL、CMU PLL&#xff0c;这里进行一下扩展学…

LoadBalancer将服务暴露到外部实现负载均衡metallb-layer2模式配置介绍

目录 一.metallb简介 1.支持多种负载均衡协议 2.支持自定义 IP 地址范围 3.无需额外的硬件设备 4.易于安装和配置 5.可扩展性强 6.layer2模式下选举的leader节点压力大 二.layer2模式配置演示 1.开启ipvs并开启严格ARP模式 2.下载并应用metallb 3.创建一个 IPAddres…

用友U8 Cloud RegisterServlet SQL注入漏洞复现

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友U8 Cloud RegisterServlet接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用户信息泄露。 …

2023年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题(四)

2023年甘肃省职业院校技能大赛&#xff08;中职教师组&#xff09; 网络安全竞赛样题&#xff08;四&#xff09; &#xff08;总分1000分&#xff09; 目录 模块A 基础设施设置与安全加固 A-1任务一 登录安全加固&#xff08;Windows&#xff09; A-2任务二 本地安全策略…

搭建React项目,基于Vite+React+TS+ESLint+Prettier+Husky+Commitlint

基于ViteReactTSESLintPrettierHuskyCommitlint搭建React项目 node: 20.10.0 一、创建项目 安装包管理器pnpm npm i pnpm -g基于Vite创建项目 pnpm create vitelatest web-gis-react --template react-ts进入项目目录安装依赖 $ cd web-gis-react $ pnpm i启动项目 $ pnpm…

【开题报告】基于SpringBoot的文学鉴赏平台的设计与实现

1.选题背景 随着互联网的普及和文学教育的重视&#xff0c;人们对文学作品的阅读和交流需求逐渐增加。传统的纸质书籍已经不能完全满足人们多样化的阅读需求&#xff0c;因此基于互联网的文学鉴赏平台应运而生。这样的平台通过提供文学作品的展示、评论和交流功能&#xff0c;…

ARM64安全特性之SMAP

ARM64 SMAP&#xff08;Supervisor Mode Access Prevention&#xff09;是一种安全扩展&#xff0c;用于在ARM64架构中限制特权模式下的内存访问。它的目的是防止特权模式下的恶意软件或漏洞利用程序访问受限内存区域&#xff0c;从而提高系统的安全性。 SMAP的主要原理是通过…

new Promise用法

promise要解决的问题 回调函数问题 问题一&#xff1a;回调函数多层嵌套调用&#xff08;回调地狱&#xff09; 问题二&#xff1a;每次回调的结果存在成功或失败的可能性 使用 promise 解决 解决问题一&#xff1a;promise 通过 .then 实现链式调用 解决问题二&#xff1a;p…

Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细)

学Turtle库&#xff0c;其实就是学数学&#xff0c;而且还能提高对数学和学习的兴趣。Turtle库还能够帮助孩子更好地理解几何学和数学概念&#xff0c;比如角度、比例、几何图形的性质等等&#xff0c;是Python中一个很有趣的库。 前言 Turtle库是Python中一个很有趣的库&…

Web开发-问题-前后端交互数据不一致

0x01 问题描述 所用的技术&#xff1a;VueSpring Boot后端传给前端数据&#xff1a; [Student(studentId1, personorg.fatmansoft.teach.models.Person4abe6020, major软件工程, className一班, grade一年级), Student(studentId2, personorg.fatmansoft.teach.models.Person…

百元开放式蓝牙耳机哪款好、热门高性价比开放式推荐

在众多耳机类型中&#xff0c;开放式耳机正逐渐崭露头角。它们融合了音质和佩戴舒适性&#xff0c;能给你带来全新的佩戴感受。这些耳机不仅提供高品质的音响体验&#xff0c;还让你能够在户外佩戴欣赏音乐的同时保持对周围环境的感知&#xff0c;更加安全、保障。 在本文中&a…

字符数组和字符串例题2

1、回文字符串 题目描述 给定一个字符串&#xff0c;长度不超过100&#xff0c;判断它是否是回文串。例如: aba, abcba是回文, abc, xyy 不是回文。 输入要求 输入一个字符串&#xff0c;由小写字母组成 输出要求 若是回文输出Yes&#xff0c;否则输出No 输入样例 abcb…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis核心配置详解

第一章 Mybatis核心配置详解【mybatis-config.xml】 1.1 核心配置文件概述 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 1.2 核心配置文件根标签 没有实际语义&#xff0c;主要作用&#xff1a;所有子标签均需要设置在跟标签内部 1.3 核心配置文件…

Lambda表达式与方法引用

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 引子 先来看一个案例 …