概述
最近项目又一次涉及支付,遇到不少之前没注意的问题,解决了一次还是容易遗忘,就针对性的写个博客。先上遇到的问题
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 集成支付宝 对sign值做utf-8 URLencode的全部内容,希望文章能够帮你解决iOS 集成支付宝 对sign值做utf-8 URLencode所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复