
业务流程图
图中的“商业客户”是我们的IOS客户需要做的:
在调用支付宝支付接口之前,我们还需要一个订单. 在描述文档时,此步骤也放在客户端,但也可以在服务器端生成. (在这个图中,支付宝会在支付成功后通知服务器,这样您就可以在服务器端获得所有订单,而且会更安全):
事实上,这些步骤对业务来说已经足够了,但存在安全问题. 你当然不希望你收到的付款结果被截取和修改. 因此,在生成订单和处理付款结果时需要进行安全检查:
生成订单时对数据进行签名,收到付款结果时进行验证支付sdk,以验证数据是否被篡改
支付宝目前只支持RSA加密进行签名验证
除了加密和解密,RSA加密算法还可以用于签名验证
简而言之,RSA将生成一个私钥和一个公钥. 您应该单独保留私钥,并且可以分发公钥
对于签名验证,可以使用私钥加密要传输的数据,生成签名值,然后分发数据. 接收者通过公钥检查签名值. 如果是一致的,则认为数据是无篡改的

具体到支付宝使用RSA进行签名验证,即在生成订单时,需要使用私钥生成签名值;在处理退回支付的结果时,需要使用公钥验证退回的结果是否被篡改
对于特定的值、如何生成签名以及哪些值最需要签名才能进行验证,您可以在第一个文档中找到它们. 稍后我将简要地提到它们,但仍以文件或惯例为准
一旦过程明确,就很容易理解如何整合
如果您只需要发送订单并处理付款返回结果,则只需要添加AlipaySDK.bundle包以及AlipaySDK.framework框架好吧
现在对旧版本提出抱怨. 与当前版本相比,旧版本不仅改变了,而且将原来的版本改为单个示例. 真是反复无常. 如果任何一个小工厂的SDK被抛弃了,我想
如何发送订单:
- (void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;
支付宝的SDK只是给出了一种处理结果的方式,而不是其他第三方SDK提供了一种处理openURL的方式,所以你需要通过DEMO或者在第二个文档中找到处理openURL的方式:



1 if ([url.host isEqualToString:@"safepay"]) { 2 [[AlipaySDK defaultService] processOrderWithPaymentResult:url 3 standbyCallback:^(NSDictionary *resultDic) { 4 NSLog(@"result = %@",resultDic); 5 }]; }
查看代码
SDK还提供了一种处理OpenURL返回结果的方法
- (void)processOrderWithPaymentResult:(NSURL *)resultUrl standbyCallback:(CompletionBlock)completionBlock;
两个回调块都定义为typedef void(^completionblock)(nsdictionary*resultdic)
返回了字典,但SDK中没有关于密钥的提示
您可以在文档中找到它,也可以自己尝试. 返回信息如下:
备忘录: 提示信息. 例如,当状态码为6001时,备注为“用户中途取消”. 但不要完全依赖这些信息. 如果不安装支付宝应用,使用网页支付时,取消时状态码为6001,但备忘为空. (当我发现这个问题时,我决定对于这样一个不可靠的SDK,我最好尽可能地依赖自己)结果、订单信息和签名验证信息. 如果不想进行签名验证,可以忽略此字段

如果您不关心或不注意支付的安全性,可以在这里完成支付宝的整合
如果要更安全,需要添加以下签名验证
首先,RSA只是一个算法,因此您可以使用任何开源算法或自己实现它,以实现签名和验证的目的
在整个过程中,由于涉及RSA公钥、私钥、签名、SHA1验证、SHA1值、Base64和URL编码的产生,所以支付宝使用开源代码对这些问题进行投诉. OpenSSL(在下一个Tucao中,它将OpenSSL放在演示中,它不知道演示中将使用多少产品. 这对季阿里本人也有不小的用处. 他什么时候能去老罗和华为这样的赞助网站
如果您想省事并使用OpenSSL,您需要将所有这些项添加到项目中: DEMO中的OpenSSL目录头文件、libcrypto.a libssl.a和Util catalog中的两个库文件
支付宝写真
如上所述,订单签名应该使用私钥,但将私钥放入应用程序本身是不安全的,因为您的应用程序是分发给用户的,私钥应该在他们自己手中,而分发的应该是公钥
所以私钥最好放在自己的服务器上. 订单加密在服务器端完成. 服务器将签署的订单信息返回给app,app通过SDK发送给支付宝. 这将更加安全;服务器还可以掌握所有订单状态
如果必须将私钥集成到应用程序中,可以参考SDK的演示,因为此演示是私钥在应用程序中本地生成的顺序签名
上面的回调块提到返回的内容. 返回的付款结果中的结果字段包含订单信息和签名信息,因此签名验证是该字段的值
文档中有此字段的示例. 实际结果不换行. 我把线改成:
partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测试"&body="测试测试"&total_fee="0.01"¬ify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&success="true"
&sign_type="RSA"
&sign="hkFZr+zE9499nuqDNLZEF7W75RFFPsly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aE+HCLiBXrPDNdLKCZ gSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="
总共有三部分
验证步骤如下:
如果希望简单,可以直接使用util目录下的dataverifier来验证签名
事实上,不用OpenSSL就可以使用其他第三方RSA的开源代码. 您可以在演示包装器源代码和SDK文档中看到OpenSSL
或以上是支付宝iOS SDK的介绍
一般来说支付sdk,我不认为我应该依赖这个不可靠的SDK来自己处理
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-237360-1.html
@小米公司
12海里领海和200海里专属经济区规定的既定事实