微信虚拟支付错误码:1000到10056,一路踩坑到支付成功
一、前期准备按照官网先进行配置虚拟支付 | 微信开放文档拿到相关参数appid、appSecret、offerId、appKey现网、sandboxAppKey沙网、env0:正式环境、1沙网环境获取如下图二、报错信息{errMsg: requestVirtualPayment:fail PAY_SIG_INVALID, errno: -15006, errCode: -15006} {errno: 1001, errMsg: requestVirtualPayment:fail parameter error: parame…meter.mode should be String instead of Undefined;} {errno: 1001, errMsg: requestVirtualPayment:fail parameter error: parameter.mode should be String instead of Undefined;} {errno:1001,errMsg:requestVirtualPayment:fail parameter error: parameter.signData should be String instead of Object;parameter.mode should be String instead of Undefined;} ....三、完整代码wx.requestVirtualPayment({ env: 0, // 线上正式环境消除开发者扫码调试弹窗 signData: payInfo.signDataStr, paySig: payInfo.paySig, signature: payInfo.signature, mode: short_series_goods, success: () { // 仅弹窗打开不代表支付完成不执行轮询 }, fail: (err) { console.error(支付弹窗关闭(取消/付款完成), err); // 弹窗关闭立刻查询订单状态 this.pollOrderStatus(this.currentOrderNo); } });public MapString, Object createOrder(PayOrderVo payOrderVo) throws Exception { logger.info( 开始创建VIP会员虚拟支付订单 ); //自己的业务处理-创建订单信息 // 5. 构造米大师标准signData TreeMapVIP道具专用 short_series_goods MapString, Object signDataMap new TreeMap(); signDataMap.put(offerId, offerId); signDataMap.put(env, env); signDataMap.put(mode, short_series_goods); // 单次付费道具/会员固定值 signDataMap.put(currencyType, CNY); signDataMap.put(buyQuantity, 1); // 单次购买1份会员 signDataMap.put(productId, String.valueOf(goods.getId())); // 价格转分为数字类型解决-15016字段类型报错 int priceCent goods.getPrice().multiply(new BigDecimal(100)).intValue(); signDataMap.put(goodsPrice, priceCent); signDataMap.put(outTradeNo, orderNo); signDataMap.put(attach, ); // FastJSON稳定序列化避免格式差异导致签名失效 String signDataStr JSON.toJSONString(signDataMap, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.DisableCircularReferenceDetect ); logger.info(标准signDataStr{}, signDataStr); // 6. 区分环境选取对应AppKey String selectedAppKey env 1 ? sandboxAppKey : appKey; logger.info(当前环境env{}, 使用密钥AppKey{}, env, selectedAppKey); // 7. 生成paySig修复核心删除小游戏前缀仅原始signDataStr签名 String paySig generatePaySig(signDataStr, selectedAppKey); logger.info(生成paySig{}, paySig); // 8. 生成用户侧signaturesessionKey签名无修改 String signature generateSignature(signDataStr, sessionKey); logger.info(生成signature{}, signature); // 9. 返回前端支付参数 MapString, Object result new LinkedHashMap(); result.put(orderNo, orderNo); result.put(offerId, offerId); result.put(goodsPrice, priceCent); result.put(paySig, paySig); result.put(signature, signature); result.put(signData, signDataMap); result.put(signDataStr, signDataStr); result.put(attach, ); return result; } /** * 小程序VIP道具付费 paySig 签名无小游戏前缀适配short_series_goods */ private String generatePaySig(String signDataStr, String appKey) throws Exception { // 必须拼接固定前缀 requestVirtualPayment String signSource requestVirtualPayment signDataStr; return hmacSha256Hex(signSource, appKey); } /** * 用户sessionKey签名用于前端校验 */ private String generateSignature(String signDataStr, String sessionKey) throws Exception { return hmacSha256Hex(signDataStr, sessionKey); } /** * 标准HMAC-SHA256 输出全小写16进制米大师统一标准 */ private String hmacSha256Hex(String data, String secret) throws Exception { Mac mac Mac.getInstance(HmacSHA256); SecretKeySpec keySpec new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), HmacSHA256); mac.init(keySpec); byte[] hashBytes mac.doFinal(data.getBytes(StandardCharsets.UTF_8)); StringBuilder hexSb new StringBuilder(); for (byte b : hashBytes) { hexSb.append(String.format(%02x, b)); } return hexSb.toString(); }注意mode参数值我是VIP充值固定值为short_series_goodspaySid签名算法必须拼接“requestVirtualPayment”

相关新闻

力扣334.递增的三元子序列

力扣334.递增的三元子序列

分享一种非递归的方法以及一种贪心的方法(优),第一种是自己想的方法一思路先找最大数A,如果最大数左边没有两个数,删除最大数A。继续寻找最大数A,再找最大数左边最大的数B,如果最大数B在最左边&…

2026/7/1 17:01:17阅读更多 →
如何让Mac Boot Camp驱动部署像呼吸一样简单?

如何让Mac Boot Camp驱动部署像呼吸一样简单?

如何让Mac Boot Camp驱动部署像呼吸一样简单? 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 想象一下:你刚在Mac上安装了Windows系统,准备开始工…

2026/7/1 17:01:17阅读更多 →
嵌入式高手都在偷偷用的“第15条”:用 __attribute__((cleanup)) 在 C 语言里优雅地自动释放资源

嵌入式高手都在偷偷用的“第15条”:用 __attribute__((cleanup)) 在 C 语言里优雅地自动释放资源

该文章同步至OneChan 你有没有经历过:在函数里加了锁,却因为中途 return 或 goto 提前退出,锁永远没释放,整个系统活活卡死? 这是资深工程师压箱底的编程技巧系列第十五篇。前面我们学会了用 constructor 在 main() 之…

2026/7/1 17:01:17阅读更多 →
山西干冰酒店烟雾

山西干冰酒店烟雾

引言近年来,高端酒店、宴会厅、音乐会及婚礼庆典中,常利用干冰营造如梦似幻的舞台烟雾效果,极大提升现场氛围。然而,干冰(固态二氧化碳)在使用过程中潜藏着低温冻伤、二氧化碳浓度超标的隐患,对…

2026/7/1 18:11:26阅读更多 →
开源版Coze:Agent三件套48小时狂揽9K星

开源版Coze:Agent三件套48小时狂揽9K星

拆箱开源版Coze:Agent核心三件套大公开,48小时揽下9K Star 🔥你还在为搭建智能体疯狂加班?开源圈炸了!一个叫Dify的项目,48小时狂揽9K Star,直接把Coze的"核心三件套"搬到了你的本地服…

2026/7/1 18:11:26阅读更多 →
微信聊天记录删了怎么找回?5 套官方恢复教程,零基础一看就会

微信聊天记录删了怎么找回?5 套官方恢复教程,零基础一看就会

日常使用微信时,很多人会因清理会话、误操作、手机故障、更换新机等情况丢失重要聊天记录,工作合同沟通记录、家人生活照片、转账凭证、关键文件一旦删除,很难直接找回。根据腾讯官方公开的数据存储说明,微信不会在云端永久存储用…

2026/7/1 18:11:26阅读更多 →
实战案例类: 从8%到35%:某电销团队提升机器人外呼接通率的实战案例复盘

实战案例类: 从8%到35%:某电销团队提升机器人外呼接通率的实战案例复盘

#### Part 1: 故事引入:一个“濒临解散”的电销团队 “如果再看不到效果,下个月整个外呼部门可能就要被裁掉了。”——这是某互联网教育公司电销负责人张磊,在2023年初面临的困境。 他们的团队有20名全职电销员,每人每天最多打150…

2026/7/1 18:11:26阅读更多 →
HarmonyOS7 购物车看着简单最容易翻车:增删改、全选、价格计算一篇讲透

HarmonyOS7 购物车看着简单最容易翻车:增删改、全选、价格计算一篇讲透

文章目录前言购物车数据模型全选与反选逻辑数量步进器滑动删除价格计算完整页面拼装一些实用建议前言 购物车这个页面,看着简单,做起来坑真不少。增删改查、全选反选、滑动删除、实时价格计算——每个功能单独拎出来都不难,凑一块儿状态管理…

2026/7/1 18:11:26阅读更多 →
实用小工具上线!BlockSec USDT拉黑查询网站,一键核验地址冻结状态

实用小工具上线!BlockSec USDT拉黑查询网站,一键核验地址冻结状态

在USDT交易中,地址冻结、解冻状态查询是用户高频刚需,却长期受困于传统渠道短板——TronScan、Etherscan 无相关展示功能,个别企业级KYT工具又缺乏便捷查询入口。下面就为大家详细拆解网站四个页面。 1. Overview:全局数据一键预…

2026/7/1 18:06:24阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →