您的当前位置:首页正文

微信解析版

2024-12-16 来源:华佗小知识
#一共需要两次签名

#第一次
`是刚开始,把商品信息传给后台,生成的订单`
`把订单号传给后台(我们这里也把价格传给了后台),后台进行第一次签名,生成了预付订单,同时返回了prepayid`

#第二次
`需要的参数为:
  appid、
  partnerid(商户id)、
  prepayid、
  noncestr(随机字符串)、
  timestamp(时间戳,iOS只支持10位数,Java生成的一般为13位的毫秒,可以/1000来达到目的。PHP生成的为10位的秒)、
  package(固定参数Sign=WXPay)`

#注意:不要传多余的参数,比如第一次签名传的商品信息,都不要在二次签名的时候传入,不然就会出现“支付签名认证失败”。

iOS客户端调起微信的代码:
//发起微信支付,设置参数
                PayReq *request = [[PayReq alloc] init];
                
                /**
                 openID:
                 由用户微信号和AppID组成的唯一标识,发送请求时第三方程序必须填写,用于校验微信用户是否换号登录
                 //这个不用传,appid已经在后台签名时拼接上了。(PayReq中也没有这个参数。œ)
                 */
//                request.openID = WXAPPKEY;
                request.partnerId = response[@"map"][@"mch_id"];
                request.prepayId= response[@"map"][@"prepay_id"];
                request.package = @"Sign=WXPay";
                //后台返回的随机字符串
                request.nonceStr = response[@"map"][@"nonce_str"];
                //后台返回的时间戳(必须为10位数(单位:秒)),必传
                request.timeStamp = [response[@"map"][@"curr_time"] intValue]; 
                
                // 签名加密
                request.sign=response[@"map"][@"sign"];  //注意这里的签名是把所有的信息都放在里面了,这里默认放了字段支付1元
                // 调用微信
                [WXApi sendReq:request];
                
                if ([WXApi sendReq:request]) {
                    NSLog(@"调起成功");
                }
后台第一次签名用到的参数 二次签名用到的参数 交易类型(也可以试试“APP”) limit_pay限制类型,可以限制信用卡支付 image.png

URL scheme其实就是个唯一标识

在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,
在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id。

注意:

下面是交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。
官方微信支付流程.png 微信支付流程解析,初步理解。 官方微信支付流程解析 image.png
                // 调用微信(注意sendReq只能调用一次,第二次不会成功。)
                if ([WXApi sendReq:request]) {
                    NSLog(@"调起成功");
                    
                }

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文