
业务流程图
图片中的“商家客户端”是我们的iOS客户端必须执行的操作:
在调用支付宝付款界面之前,我们还需要生成一个订单. 在说明文档中的叙述时,此步骤也要在客户端执行,但是它也可以在服务器端生成此顺序(图中的支付宝会在付款成功后通知服务器端,因此如果生成了服务器端的订单,您可以掌握所有订单. 这样会更加安全):
实际上,对于企业来说,这些步骤就足够了,但是存在安全问题. 您绝对不希望截取和更改收到的付款结果,所以. 生成订单和处理付款结果时,这需要进行安全检查:
在生成订单时签名数据,并在收到付款结果时验证数据. 要检查数据是否已被篡改.
支付宝目前仅支持RSA加密以进行签名验证.
除了加密和解密外,RSA加密算法还可以用于签名验证.
简单地说,RSA将生成一个私钥和一个公钥. 您应该单独保留私钥,然后才能分发公钥.
进行签名验证时. 您可以使用私钥对要传输的数据进行签名和加密支付sdk,以生成签名值. 数据分发后,接收方通过公钥验证签名值,并假设数据一致则未篡改数据.

详细说明,支付宝使用RSA进行签名验证,即在生成订单时,必须使用私钥生成签名值;在处理返回的付款结果时,必须使用公共密钥来验证返回的结果是否已被篡改.
详细说明需要哪些值以及如何生成签名. 在第一个文档中可以找到哪些签名和验证最多的值支付sdk,我将在稍后简要介绍,但是它仍然基于文档或实践.
集成
澄清流程后,很容易理解如何集成.
付款SDK
假设您只需要发送订单并处理付款退货结果,则只需添加AlipaySDK.bundle和AlipaySDK.framework.
再次出现. 将之前使用的旧版本号与当前版本号进行比较. 不仅更改了类名,还使用了原始的类方法,现在将新版本更改为单例. . 真的任性,如果这是小型工厂的SDK. 预计将尽早放弃.
发送订单的方法:
- (void)payOrder:(NSString *)orderStr
fromScheme:(NSString *)schemeStr
callback:(CompletionBlock)completionBlock;

与其他第三方SDK提供处理openURL的方法不同,支付宝SDK仅提供一种处理返回的结果的方法,因此您需要找到通过DEMO或第二个文档处理openURL的方法: <<
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}]; }
SDK还提供了一种用于处理openURL返回的结果的方法
- (void)processOrderWithPaymentResult:(NSURL *)resultUrl
standbyCallback:(CompletionBlock)completionBlock;
两个回调块均定义为typedef void(^ CompletionBlock)(NSDictionary * resultDic);
返回了词典,但是SDK没有提示输入任何键.
您可以在文档中找到它,也可以自己尝试,返回的信息如下:
备忘,提示信息. 例如,当状态代码为6001时,便笺为“用户中途取消”. 但是,假设没有安装支付宝应用程序,则完全不要依赖此信息. 使用网络支付时. 取消时状态码为6001,但是此备忘录为空.
.

(当我发现这个问题时,我决定使用这样一个不可靠的SDK. 尝试依靠自己...)结果. 订单信息和签名验证信息. 假设您不想执行签名验证,则可以忽略此字段.
假设您对付款的安全性没有太多关注或关注. 至此,支付宝的整合就可以完成了.
假设您想更加安全. 仍然需要添加以下签名验证.
签名验证
首先,RSA只是一种算法. 因此,您可以使用任何一种开放源代码或实现此算法来实现签名和验证的目的.
在整个过程中. 因为它涉及RSA公钥和私钥,RSA签名和验证签名的产生. SHA1值,base64和URL编码的计算. 因此,支付宝使用开源代码统一解决了这些问题. 也就是说,openssl(顺便说一句,我将openssl放在此DEMO中. 我不知道有多少公司的产品将用于openssl的使用. 预计Ali不会缺乏自己. 是的,您可以随时获得老罗和华为等赞助...)
假设您要节省麻烦. 也使用openssl,然后需要将这些内容添加到项目中: DEMO中openssl文件夹的头文件,两个库文件libcrypto.a libssl.a,由Alipay在DEMO中编写的Util文件夹
订单签名
如上所述. 应该使用私钥进行订单签名,但是将私钥放入应用程序实际上本身并不安全. 由于您的应用已分发给用户,因此私钥应放在您自己的手中. 公钥应该被分发.

因此,私钥最好放在您自己的服务器上. 订单加密在服务器端完成. 服务器将包含签名的订单信息返回给应用程序,并通过SDK将应用程序发送到支付宝,这样更加安全;服务器还可以掌握所有订单状态.
假设您必须将私钥集成到应用程序中,则可以引用SDK的DEMO,因为此DEMO是由私钥在应用程序本地进行的订单签名.
付款结果签名验证
上面的回调块提到了返回的内容. 返回的付款结果中的结果字段包含订单信息和签名信息,因此签名验证需要此字段的值.
文档中有此字段的示例. 实际结果中没有换行符. 我将更改该行以便于阅读:
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="hkFZrzE9499nuqDNLZEF7W75RFFPsly876QuRSeN8WMaUgcdR00IKy5ZyBJ4eldhoJ/2zghqrD4E2G2mNjs3aEHCLiBXrPDNdLKCZ gSOIqmv46TfPTEqopYfhso5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="
共有三部分
验证过程如下:
假设您想简单一点,可以直接使用Util文件夹下的DataVerifier进行签名验证
实际上,除了使用openssl之外,还可以使用其他第三方RSA开源代码. 可以在DEMO和SDK文档中查看openssl_wrapper的源代码.
以上. 这是对支付宝iOS SDK的一些介绍.
总的来说,我认为如果您可以自己处理它,仍然可以依靠这个可靠性较差的SDK.
.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-225688-1.html
我相信我们的政府一定能有不战而屈人之兵的智慧
不要中小人奸计
韦德只是比俺们厂子工资高许多