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      "#%/:<>?@[]^`

 

人已赞赏
iOS文章

iOS开发NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

2020-5-13 6:33:02

iOS文章

Xcode的Product Name、Bundle Name、Bundle Display Name区别

2020-5-13 7:48:21

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索