iOS开发调起微信支付显示白色确定按钮的解决方案

1 篇文章 0 订阅
1 篇文章 0 订阅

问题描述:

    第一次做微信支付功能,有很多地方不是很懂,下面分享一下很多人都会遇到的一个问题,在调起微信支付的界面的时候,只出现了一个白色的确定按钮,如下图:


问题原因:

    查了很多资料,大多数都说是签名的问题,不该直接使用服务器返回的签名,这个签名要自己生成。

解决办法:

    微信开发文档中的签名算法:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3

    下面介绍一下这个签名算法在iOS开发中的实现:

    1.拼接参数:需要拼接的参数如下图所示

注意:这里拼接参数的顺序为:appid, noncestr, package, partnerid, prepayid, timestamp

其中:

这里的appid为创建微信应用时生成的appid,

package为固定值Sign=WXPay,

partnered为商户号,应该是申请开通微信支付的时候获取到的,

noncestr,prepayid,timestamp为服务器返回的数据

    2.拼接秘钥

    注意这里的秘钥的路径为:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置

    3.对拼接后的字符串进行MD5加密,并将加密后的结果中的小写英文字母转成大写字母

上述过程的代码如下:

#pragma mark --签名算法,获取签名

- (NSString *)getSignWithPartnerId:(NSString *)partnerId

                      withPrepayId:(NSString *)prepayId

                      withNonceStr:(NSString *)nonceStr

                     withTimeStamp:(UInt32)timeStamp

                       withPackage:(NSString *)package

{

    //拼接stringA

    NSString *stringA = [NSStringstringWithFormat:@"appid=%@&noncestr=%@&package=%@&partnerid=%@&prepayid=%@&timestamp=%d",@"替换为微信appid", nonceStr, package, partnerId, prepayId, timeStamp];

    //拼接API秘钥

    NSString *stringSignTemp = [NSStringstringWithFormat:@"%@&key=%@", stringA,@"这里的key替换为微信商户平台中自己设置的key"];

    //MD5签名

    NSString *sign = [self md5:stringSignTemp];

    //转换成大写字母

    sign = [sign uppercaseString];

    return sign;

}

#pragma mark --MD5签名算法

- (NSString *) md5:(NSString *) str

{

    const char *cStr = [strUTF8String];

    unsignedchar result[CC_MD5_DIGEST_LENGTH];

    CC_MD5(cStr, strlen(cStr), result);// This is the md5 call

    return [NSStringstringWithFormat:

            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",

            result[0], result[1], result[2], result[3],

            result[4], result[5], result[6], result[7],

            result[8], result[9], result[10], result[11],

            result[12], result[13], result[14], result[15]

            ];

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jinrui_w

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

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

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

打赏作者

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

抵扣说明:

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

余额充值