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

转发的。 这是转发的

iOS 集成支付宝 对sign值做utf-8 URLencode_第1张图片

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

iOS 集成支付宝 对sign值做utf-8 URLencode_第2张图片

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

解决方法:

//这里的Sign为后台传过来,newsign是经过URLencode的

NSString*newsign= (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)sign, NULL, (CFStringRef)@"!*'();:@&=+$,./?%#[]", kCFStringEncodingUTF8));

下面拓展点别的

1.网络请求时url中携带@等特殊字符的解决方案

a.对url进行特殊字符编码

-(nullableNSString*)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 *)URLUserAllowedCharacterSetNS_AVAILABLE(10_97_0);

/ /返回一个包含字符的字符集允许在一个URL的密码子组件。

+ (NSCharacterSet *)URLPasswordAllowedCharacterSetNS_AVAILABLE(10_97_0);

/ /返回一个包含字符的字符集允许URL的子组件。

+(NSCharacterSet *)URLHostAllowedCharacterSetNS_AVAILABLE(10_97_0);

/ /返回一个包含字符的字符集允许URL的路径组件。字符“;”是一种合法的路径,但是建议最好是percent-encoded兼容NSURL(-stringByAddingPercentEncodingWithAllowedCharacters:percent-encode任何‘;’字符如果你通过URLPathAllowedCharacterSet)。

+(NSCharacterSet *)URLPathAllowedCharacterSetNS_AVAILABLE(10_97_0);

/ /返回一个包含字符的字符集允许一个URL的查询组件。

+(NSCharacterSet *)URLQueryAllowedCharacterSetNS_AVAILABLE(10_97_0);

/ /返回一个包含字符的字符集允许URL的片段组件。

+(NSCharacterSet *)URLFragmentAllowedCharacterSetNS_AVAILABLE(10_97_0);

/ /编码字符范围

URLFragmentAllowedCharacterSet"#%<>[\]^`{|}

URLHostAllowedCharacterSet      "#%/<>?@\^`{|}URLPasswordAllowedCharacterSet"#%/:<>?@[\]^`{|}

URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}URLQueryAllowedCharacterSet"#%<>[\]^`{|}

URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

你可能感兴趣的:(iOS 集成支付宝 对sign值做utf-8 URLencode)