对hash签名失败_vue项目中微信jssdk在ios签名失败

一、问题描述

1. vue项目中微信jssdk签名时,在安卓和ios是有差异的,签名时使用的url=window.location.href.split('#')[0],此时在安卓没问题,在ios会导致签名失败。因为在安卓中应该拿去签名的URL就是每个页面的URL,在ios中拿去签名的URL应该是微信分享时的URL(这个是我自己猜的),微信会对ios页面链接做处理,我们复制到的链接有时是刚进入项目时的链接而不是当前页面的链接,多刷新几次的话可能就是当前页面的链接,总之这个是ios微信的bug,官方建议使用 hash路由解决,官方文档说明  https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/iOS_WKWebview.html

2. 报错config:require subscribe,关注公众号后才能签名。

二、解决方案

1. 使用hash路由

使用hash路由时安卓ios都是没问题的,这也是官方的建议。

2. history路由里使用 

简单暴力使用a标签去跳转签名的页面,也就是说A->B,在B页面做签名的话,在A页面的跳转方式不用vue路由跳转,改用a标签跳转,这个时候获取到的URL是可以签名的。但是因为我们使用的是a标签去跳转的,所以在B页面用vue路由离开守卫监听不到回退事件,在B页面有用户未保存需要提示的话就不行了,否则可以使用此方法。

三、其他方案

有人说在刚进入页面的时候保存URL在其他页面做签名,那如果在别的页面刷新几次的话还是会签名失败的;

有人说在全局的路由守卫里做ios的判断用对应的完整URL做签名,反正我没测试成功。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信支付签名是一种安全校验的手段,用于验证请求是否合法。下面是 C# 封装微信支付签名方法的示例代码: ```csharp public static string CreateSign(SortedDictionary<string, string> parameters, string key) { // 按照参数名ASCII码从小到大排序 var sortedParams = new StringBuilder(); foreach (var kvp in parameters.OrderBy(p => p.Key)) { if (!string.IsNullOrEmpty(kvp.Value) && kvp.Key != "sign") { sortedParams.Append(kvp.Key).Append("=").Append(kvp.Value).Append("&"); } } sortedParams.Append("key=").Append(key); // 计算签名 var md5 = System.Security.Cryptography.MD5.Create(); var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(sortedParams.ToString())); var sb = new StringBuilder(); foreach (var b in bs) { sb.Append(b.ToString("x2")); } return sb.ToString().ToUpper(); } ``` 使用示例: ```csharp // 构造参数 var parameters = new SortedDictionary<string, string>(); parameters.Add("appid", "wxAPPID"); parameters.Add("mch_id", "123456"); parameters.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", "")); parameters.Add("body", "测试商品"); parameters.Add("out_trade_no", "202201010001"); parameters.Add("total_fee", "100"); parameters.Add("spbill_create_ip", "127.0.0.1"); parameters.Add("notify_url", "http://www.example.com/notify"); parameters.Add("trade_type", "APP"); // 计算签名 var sign = CreateSign(parameters, "wxKEY"); parameters.Add("sign", sign); // 输出签名结果 Console.WriteLine(sign); ``` 需要注意的是,微信支付签名需要按照参数名的 ASCII 码从小到大排序,并且不包括空值参数和 sign 参数,同时最后需要加上 key 值再进行 MD5 计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值