首页 / 体育 / 正文

支付宝控件(基于IOS下的支付宝SDK的学习与使用--实现产品支付(二))

放大字体  缩小字体 来源:深圳市搬家公司 2026-04-17 17:30  浏览次数:9

上一篇中详细说明了结合官方支付宝SDK,对工程环境进行的一些配置,实现了支付,本篇重点说明一下,注意事项和原理,主要作为自己的笔记使用,在这里分享给大家。

在支付宝 demo 中给出了签名的lib工具库,因为订单需要签名成一个字符串,然后交给支付接口,签名涉及到商户方的私钥,所以将这个签名的过程交给后台去完成,在调用支付宝支付接口前,我们把必要的参数传给后台服务器,然后服务器那边签名好后返回给我们签名后的字符串,我们传给支付宝SDK支付API就能唤起支付宝支付控件或者打开支付宝钱包进行支付了。参考

我的上篇笔记中,详细的说明了基于 手机控件支付开发包(IOS版)3.1.3 SDk的使用环境配置,我的Xcode是7.2版本。对于上一篇中有的地方我要做一些补充与说明:

//添加方法

[[AlipaySDK defaultService]

standbyCallback:^(NSDictionary *resultDic) {

}];

}

//下面的参数不可空

@property(nonatomic, copy) NSString * seller; //卖家支付宝账号(邮箱或手机号码格式)或其对应的支付宝唯一用户号(以2088开头的纯16位数字)。

@property(nonatomic, copy) NSString * productName; //商品的标题

@property(nonatomic, copy) NSString * amount; //总金额 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。

//以下的信息是支付的基本的配置信息(固定不变)

@property(nonatomic, copy) NSString * paymentType; //支付类型。默认值为:1(商品购买)。

@property(nonatomic, copy) NSString * itBPay; //未付款交易的超时时间 设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭。当用户输入支付密码、点击确认付款后(即创建支付宝交易后)开始计时。取值范围:1m~15d,或者使用绝对时间(示例格式:2014-06-13 16:00:00)。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。该参数数值不接受小数点,如1.5h,可转换为90m。

//下面的参数是可空的

@property(nonatomic, copy) NSString * appID; //客户端号 标识客户端。

注意:

(2)此外不要在要拼接的参数中加入其他的key用& 连接,支付宝建议不要在请求参数中附带和支付无关的业务系统自身的key相关数据。

使用支付宝的步骤:

使用支付宝在完成支付后,采用同步通知客户端处理结果,异步主动通知商品集合参数中早已设定好的回调服务器。

支付结果的提取,必须通过CompletionBlock获取,禁止开发者私自解析支付结果返回的URL。获取值的Key对应resultStatus、memo与result(result中的值,开发者可以自行解析);

下面的是一些重要的信息,是在支付宝完成支付后的注意事项:

同步返回的数据,对于商户在服务端没有收到异步通知的时候,可以依赖服务端对同步返回的结果来进行判断是否支付成功。同步返回的结果中,sign字段描述了请求的原始数据和服务端支付的状态一起拼接的签名信息。验证这个过程包括两个部分:1、原始数据是否跟商户请求支付的原始数据一致(必须验证这个);2、验证这个签名是否能通过。上述1、2通过后,在sign字段中success=true才是可信的。【特别注意,同步结果校验的逻辑,必须放在服务端处理,切记不要放在客户端】【强烈建议商户直接依赖服务端的异步通知,忽略同步返回】

支付结果的返回码实例:

ResultStatus={9000};memo={};result={partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测试"&body="测试测试"&total_fee="0.01"&notify_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+HCLiBXrPDNdLKCZgSOIqmv46TfPTEqopYfhs+o5fZzXxt34fwdrzN4mX6S13cr3UwmEV4L3Ffir/02RBVtU="}

返回码也要注意了解一下

对商户的请求数据处理完成后,会将处理的结果数据通过服务器主动通知的方式通知给商户网站。这些处理结果数据就是服务器异步通知参数。

异步通知商户服务器,是服务器之间的交流,不能像同步通知那样可见。支付宝服务器是使用POST方式向商户服务器发送包含处理结果的通知,商户得到这些信息后必须给支付宝服务器反馈一个7个字符的字符串success,如果商户程序中没有打印出,支付宝服务器会不停地发送异步通知,默认时间是24h22m,一般25小时以内完成8次通知(通知的间隔频率一般是:2m,10m,10m,1h,2h,6h,15h)。

商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,并判断total_fee是否确实为该订单的实际金额(即商户订单创建时的金额),同时需要校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),上述有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 如果商户需要对同步返回的数据做验签,必须通过服务端的签名验签代码逻辑来实现。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。

通知交易状态有必要也做一下了解:

关于不可意退款的移动快捷支付:参考

(Over 接上一篇)

打赏
0相关评论
热门搜索排行
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:115904045
头条快讯网 版权所有
中国互联网举报中心