微信支付失败中关于“签名错误”的解决方案

微信支付回调验签失败 / // 如果处理失败,应返回 4xx/5xx 的状态码,例如 500 INTERNAL_SERVER_ERROR。"event_type":"TRANSACTION.SUCCESS","summary":"支付成功",//证书序列号(微信平台) 验签的“微信支付平台证书”所对应的平台证书序列号。// 签名验证失败,返回 401 UNAUTHORIZED 状态码。//获取请求头中的报文签名信息,用于后续验证签名。//微信传递过来的签名 验签的签名值。//验签的随机字符串。 阅读详情

我们实际运用过程中,微信支付在移动端用的比较多,对接微信支付比较普遍,对接过程中,经常会出现“签名错误”的常见问题,网上给的解决方案也是比较多,我是综合了几个解决方案后提供大家参考。

解决方案一、
         系统的部署的地址是不是在微信公众号设置里面的白名单
解决方案二、
       1、确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。
       2、确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。
          确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'
          后面的GET参数部分,但不包括'#'hash后面的部分。
       3、确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
       4、确保一定缓存access_token和jsapi_ticket。
       5、确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。
          如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分
          的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent)。
      
解决方案三、
    提交支付接口里面的descripttion里面的参数是否有特殊字符,如\n\t,这个问题造成我们项目有些是可以支付,有些是提示签名错误。
微信支付 app支付 签名失败,微信支付的坑,微信支付SDK demo bug 后面有源码参考 1、sdk问题 下面是WXPayConfig,抽象方法是不带修饰符的,只能同一包使用,我的配置怎么能在同一包下呢,坑, 改源码:使用public 修饰 然后demo也是坑,实现抽象类,不知道谁写的 改源码:使用继承 修改后 2、签名问题-预支付 WXPayUtil.generateSignature(preOrder, weixinConfig.get... 阅读详情

相关推荐

微信支付V3平台证书验签失败排查指南:从错误签名到解决方案

本文详细解析了微信支付V3平台证书验签失败的常见问题及解决方案,包括错误签名、证书信息不匹配等核心问题。通过排查步骤和最佳实践,帮助开发者快速定位并解决验签失败问题,确保支付接口的稳定运行。

weixin_30576827的博客 448

微信app支付签名错误,但验证工具正确,如何解决

微信app支付签名错误,但验证工具正确,如何解决

liwei_0718的专栏 2943

别再为Word转PDF表格变形发愁了!Aspose.Words for Java 19.5 保姆级避坑指南

本文详细介绍了使用Aspose.Words for Java 19.5解决Word转PDF时表格变形问题的完整方案。从格式转换原理到实战技巧,涵盖固定表格宽度、禁用自动调整、强制文本换行等核心方法,并提供高级场景应对策略和性能优化建议,帮助开发者高效处理复杂文档转换需求。

weixin_28702105的博客 266

微信下单失败1!签名错误

如果问题依然存在,可以尝试使用微信提供的签名工具(如“微信支付统一下单API签名生成工具”)来辅助生成正确的签名,对比检查您的代码实现。当您在微信下单时遇到“签名错误”的提示,这通常意味着生成的签名与微信服务器端计算的签名不匹配,导致交易验证失败。请确保您使用的签名算法与微信支付后台设置的一致,并严格按照相应算法的规则进行签名计算。例如,如果是MD5签名,需要将排序后的参数键值对(key=value)用"&"连接后,再加上商户密钥(API key),然后对这个字符串进行MD5加密。建议每次请求时生成新的。

qq_33240556的博客 2949

2021年全国职业院校技能大赛高职组网络系统管理赛项

S1 Ruijie(config)#switch virtual domain 1 Ruijie(config-vs-domain)#switch 1 Ruijie(config-vs-domain)#switch 1 priority 150 Ruijie(config-vs-domain)#switch 1 description S1 Ruijie(config-vs-domain)#exit Ruijie(config)#vsl-port Ruijie(config-vsl-port)#po

bfq05234214的博客 1133

matlab生成blocks、bumps和doppler标准测试信号

关键函数:wnoise使用方式X = wnoise(FUN,N) [X,XN] = wnoise(FUN,N,SQRT_SNR) [X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)X = wnoise(FUN,N) 返回由 FUN给出的信号,长度为2^N,幅值范围[0,1].[X,XN] = wnoise(FUN,N,SQRT_SNR) ,返回了一个测试信号X,以及一个加噪

ZSZ_shsf的博客 6580

微信支付失败提示签名错误,请检查后重试

③ 发起授权申请后,再次登录微信小程序后台进入【微信支付-商户号管理】找到待关联商户号,点击确认申请绑定的商户号(如有多个商户号,确认前注意核对要绑定的商户号)① 需登录微信商户平台进入【产品中心-AppID账号管理-我关联的AppID账号】点击“关联APPID”输入小程序APPID进行授权绑定即可。② 设置好APIv2密钥后,在商城后台【设置-接口配置-商城支付配置-微信支付配置】的Key中填写。② 将10位数的商户号填写到商城后台【设置-接口配置-商城支付配置-微信支付配置】的Mchid中。

weixin_64051447的博客 6716

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

微信小程序支付回调解析签名异常

微信支付回调解析签名异常 om.wechat.pay.java.core.exception.ValidationException: Processing WechatPay notification,signature verification failed,signType[WECHATPAY2-SHA256-RSA2048] serial[556CCF0B47804BDD0A5E1CC12FEE1A70A95D588A]

m0_61584203的博客 2371

华为OD机试 - 停车场费用统计 - HashSet(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。停车场统计当日总收费,包月的车不统计,不包月的车半个小时收一块钱,不满半小时不收费,如果超过半小时,零头不满半小时按半小时算,每天11:30-13:30时间段不收费,如果一辆车停车时间超过8小时后不收费。现提供停车场进出车辆的统计信息,需要你来计

学Java,找哪吒 238

海上通信技术发展与研究综述

通过对海浪模型、节点运动特性、天线辐射特性等进行特征深度学习,考虑改变有效链路的持续时间、业务类型和容量的区别,以及卫星和节点的仰角等,改变通信策略,设计动态波束成形算法,优化折中浮标天线增益和波束宽度,适应海上环境,尤其是海浪运动时变的特性。目前的海上通信系统,同时包括海上无线通信系统、卫星通信系统、岸基通信系统、船载基站通信系统、空中基站通信系统等不同方法组成的通信系统来满足不同的需求,如海上无线通信系统通信成本低廉、卫星通信系统具有广域的覆盖范围、岸基通信网络可以实现数据高速传输。

weixin_70923796的博客 1000

【限时免费】 yansongda/pay项目中微信支付签名异常问题解析

yansongda/pay项目中微信支付签名异常问题解析 【免费下载链接】pay 可能是我用过的最优雅的 Alipay/WeChat/Unipay/江苏银行 的支付 SDK 扩展包了 项目地址: https://gitcode.c...

gitblog_01416的博客 543

6、深入解析Microsoft 365核心服务对比与迁移策略

本文深入解析了Microsoft 365的核心服务,包括身份和设备管理、现代设备配置体验、Exchange和SharePoint的迁移策略以及Microsoft Teams的协作功能。同时探讨了迁移过程中需要考虑的安全控制措施,为组织规划和实施云迁移项目提供了全面的指导和建议。

k8s6orchestrator的博客 107

get_brand_wcpay_request:fail,微信公众号支付的那点坑

微信公众号支付一直提示“支付验证签名失败”,明明签名没有问题,用微信验证签名工具(点击打开链接)验证签名也没问题,但就是在支付的时候提示“支付验证签名失败”, 我忍不住爆粗口,问题出在哪呢?微信支付需要先获取预支付id(也就是prepay_id),然后通过prepay_id在一次请求支付,这中间有两次加密,第一次请求微信获取付支付id(prepay_id)使用的加密方式是HMACSHA256,在

NeverNeverStopS_的博客 7613

最全教程cadence建立个人CIS数据库

此时如果你删除office365,再装Access数据库,可以安装上,然后你再装office365,系统又会把Access软件给你删除掉,因为冲突了。可以在自己的电脑上新建CIS库,主要包含下面几个内容:数据库文件,原理图封装,PCB封装,数据手册,另外建议做一个器件命名的说明。allegro在调用封装的时候,是看的.psm文件,而不是.dra文件,因此只要是c0402.psm,那么所有的内容都要保持一致。(1)文件夹不要有中文,不要有空格,否则无法识别,可以参考博主的方式,全部使用英文输入法下划线。

D_Katter的博客 249

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

微信支付签名验证失败的问题

微信签名验证失败(两个地方遇到) 第一个在统一下单的时候签名验证失败 去微信社区里面查了下,有些人是自己代码错的,但是我拿的微信sdk的demo代码做的改造,然后检查几遍也没看出来问题,我用的是小程序支付,code获取openid没问题,证明我的appid,appsecret没问题,看到有人说是商户密钥问题,其实商户密钥也没问题,可能是微信设置完没生效吧,多重置几遍之后好了, 统一下单关键代码 public Map<String, String> wxPay(String openId, Str

Mr Zhang的博客 4338

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

微信支付,“签名错误,请检查后再试” 的坑爹经历

微信提交预订单**请求**XML报文: <xml> <appid><![CDATA[wx45485fdfd5fd5fdfd]]></appid> <mch_id><![CDATA[1687896659]]></mch_id> <nonce_str><![CDATA[0XMLHISMJSJUQV7ZA6KD5GBQC5VCOVKU]]></nonce_str> <sig...

Yang_yangyang的博客 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

微信支付 统一下单 签名错误

签名错误的核心是参数规则不匹配,需严格遵守:参数小写、空值过滤、ASCII 升序、UTF-8 编码、密钥正确;优先使用微信官方校验工具核对签名,比手动排查更高效;确保total_fee单位为分、参数无多余空格、sign字段最后添加且不参与自身签名。Java 实现微信支付签名的核心是参数小写、空值过滤、ASCII 升序、UTF-8 编码、签名大写;优先通过打印签名拼接串 + 官方校验工具定位签名错误,比逐行排查更高效;确保total_fee单位为分、参数值无多余空格、API 密钥正确。

花花鱼的专栏 1274

uniapp APP端微信支付 签名错误

uniapp APP端微信支付 签名无效一:问题所在:后端返回的数据只有一次签名二:二次签名 一:问题所在:后端返回的数据只有一次签名 根据微信文档可以知道,uniapp调起微信支付需要进行第二次签名的,即根据后端统一下单返回数据再进行一次签名,签名方式要确保一致,默认采用ms5 后端返回的数据,可以查看微信支付文档的统一下单参数进行比对 { "orderNo": "xxxx", "unifiedOrderResponse": { "return_code": "SUCCESS", "r

weixin_43581181的博客 7369

Android微信支付签名错误解决方法

整体流程:1.拼接商品的信息List<NameValuePair> packageParams = new LinkedList<NameValuePair>(); packageParams.add(new BasicNameValuePair("appid", Constants.APP_ID)); packageParams.add(new Ba

guoh_的博客 1万+

坑爹的微信支付(签名错误)

前言 以前调微信支付,直接把demo粘过来改改,或者从老项目粘过来,这次接手一个一年之前的项目,说微信支付没调通,好吧,我就调吧 正文 1:之前的body写的是中文,改成英文 结果:失败(不过这一步很必要) 2:传递的xml编码换为UTF-8 结果:失败(编码应该为 ISO8859-1 ) 3.前面不行,就去微信官方签名方式测试https://pay.weixin.qq.com/...

lt的博客 2万+

微信支付返回支付签名验证失败

微信支付返回支付签名验证失败 相信大家已经深深的被微信JSAPI支付的坑所深深的伤透了,在用了微信官方的签名校验工具,已经一个一个字母的校验后,还是返回了这个错误,这真的让人很是头疼,不如咱们检查一下后台,统一下单时出现的问题. 这是正常的初始化微信支付类 WXPay wxPay = new WXPay(wxPayConfigImp); 咱们看一下初始化的函数 public WXPay(fi...

刘奋斗的笔记站 6455

记录微信获取平台证书支付错误 错误的签名,验签失败

错误的签名,验签失败前言解决方案 前言 我这里使用的是 微信支付 v3 sdk,sdk会帮我拼接签名,所以我初步判断是公司给我证书序列号错误 // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥) AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier( new WechatPay2Credentials

Javaxiaowang的博客 5737

php 微信支付 签名错误,支付验证签名支付失败?—— 微信支付的app支付

情况描述:1,调用同一下单接口,已经获取prepay_id等值了呀!2,给app提交数据之前,有个二次签名嘛,我按规则签了呀!//请大神看看我写的代码是否正确3,为啥会出现这种问题?4,跪求大神指导!这是我二次签名的代码:............ //设置参数等等$wx_result = $wechatAppPay->unifiedOrder( $params );//调用同一下单接口,并成...

weixin_36108913的博客 989
上一篇: 关于sql语句日期的统计语句
下一篇: 关于地理坐标经纬度Josn解析位数问题解决方案
星海设计
博客等级 码龄19年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星海设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值