第一点:
1、(1)调用支付宝支付接口时:如果没有安装手机客户端,会进入h5页面进行支付;支付完成的回调方法(安装客户端和或没有安装都会回到该block内):
(2)既然支付安装客户端和或没有安装都会回到该block内,有人会问那为什么要在AppDelegate中也设置回调方法,如下
既然要在这里设置支付回调的方法肯定是有原因的,那什么时候会回到该回调方法内呢?答案就是当跳转到支付宝客户端(⚠️是客户端)时,如果手欠退出或杀死了自己的app,那当你支付完后会跳到AppDelegate中的block块中。哈哈哈,解决你部分疑惑没!
(3)微信就没有支付宝那么麻烦了,发起微信支付时:如果没有安装手机客户端则不会进行支付
第二点:
2、微信支付完成后回调的方法永远都是回到如下两个方法(不管你有没有杀死程序)
真正你需要在支付完成后处理的方法是如下
支付的一些总结
1、既然需要跳转到其他应用,则需要设置“其他应用的白名单”,这是必须的
2、为了支付完后能成功跳回自己的app,需要设置URL Schemes,一般以在开放平台成功申请应用时给你的appid做为Schemes。如果你支付完成之后没有成功跳回你的应用程序,你可以看看你是否设置了正确的URL Schemes
3、在我看来,支付真正难在了后台,我们毕竟是直接从后台得到的签名加密的订单字符串,利用她直接发起支付而已
4、我支付的时候遇到了一个很深的坑:支付宝支付后台生成的的签名加密的订单字符串,数据请求我们都用的第三方AFNetWorking,(1)AFNetWorking的JSON解析默认库只支持text/json,application/json,text/javascript,所以如果出现code=-1016错误则说明当前的JSON解析模式是text/html,所以要加上这段代码:
随即又出现code = 3840,原因:json数据中的不规范造成的解决方法,json数据中也许有转义字符的出现导致了这种情况(大概解决方法)把解析得到的 NSData数据解析成为字符串形式,判断数据中是否含有这些转义字符,含有的话用空字符串替换掉,再把字符串转换为NSData类型的数据,然后进行解析为JSon数据。确实是如此:我们后台返回的签名加密字符串含有“&”,在这里,我们为的就是得到这个字符串,所以只需要把返回的NSData转换成NSString,去掉特殊字符就行。我们就需要拿到没有json解析前的NSData数据,一句代码搞定:
哈哈哈哈,支付分享就到这里啦,用简书safari总是闪退,这是咋回事