iOS 集成支付宝 对sign值做utf-8 URLencode

最近项目又一次涉及支付,遇到不少之前没注意的问题,解决了一次还是容易遗忘,就针对性的写个博客。先上遇到的问题

sign值做utf-8 URLencode

  • 由于第一次做支付签名什么的直接放前段搞,所以没遇到太多问题,支付宝文档Demo死套就行,现在为了安全考虑签名直接放后台了,所以遇到的问题就不一一赘述了。在支付的时候一直提示:交易订单处理失败,请稍后再试(ALI64)。找到原因忘了对:sign值做utf-8 URLencode,第一次看到这个我是有点懵逼的,然后就查了一下资料发现有人写的这个

  • 我用的是第一个,运行支付的时候,会出现有时候支付成功有时还是报 ALI64 错误。说明encode 方法不对,而成功支付出现的原因可能是正好碰到不需要做处理也可以用的sign值。后来用了下面这个才算解决:

解决方法:

//这里的Sign为后台传过来,newsign是经过URLencode的
   NSString *newsign = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)sign, NULL, (CFStringRef)@"!*'();:@&=+ $,./?%#[]", kCFStringEncodingUTF8));

下面拓展点别的

  • 1.网络请求时url中携带@等特殊字符的解决方案
    • a.对url进行特殊字符编码
- (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters NS_AVAILABLE(10_9, 7_0);
  • b.对url进行特殊字符解码
@property (nullable, readonly, copy) NSString *stringByRemovingPercentEncoding NS_AVAILABLE(10_9, 7_0);
____SAMPLE____
[@"!*'();:@&=+ $,/?%#[]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];  //编码
[@"!*'();:@&=+ $,/?%#[]编码后的字符串" stringByRemovingPercentEncoding];  //解码

几种编码策略

  • / /返回一个包含字符的字符集允许在一个URL的用户子组件。
 +(NSCharacterSet *)URLUserAllowedCharacterSet NS_AVAILABLE(10 _9 7 _0);
  • / /返回一个包含字符的字符集允许在一个URL的密码子组件。
 + (NSCharacterSet *)URLPasswordAllowedCharacterSet NS_AVAILABLE(10 _9 7 _0);
  • / /返回一个包含字符的字符集允许URL的子组件。
  +(NSCharacterSet *)URLHostAllowedCharacterSet NS_AVAILABLE(10 _9 7 _0);
  • / /返回一个包含字符的字符集允许URL的路径组件。字符“;”是一种合法的路径,但是建议最好是percent-encoded兼容NSURL(-stringByAddingPercentEncodingWithAllowedCharacters:percent-encode任何‘;’字符如果你通过URLPathAllowedCharacterSet)。

 +(NSCharacterSet *)URLPathAllowedCharacterSet NS_AVAILABLE(10 _9 7 _0);
  • / /返回一个包含字符的字符集允许一个URL的查询组件。
 +(NSCharacterSet *)URLQueryAllowedCharacterSet NS_AVAILABLE(10 _9 7 _0);
  • / /返回一个包含字符的字符集允许URL的片段组件。
 +(NSCharacterSet *)URLFragmentAllowedCharacterSet NS_AVAILABLE(10 _9 7 _0);
  • 编码字符范围
URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值