iOS常用的第三方支付(微信支付,支付宝支付)

微信支付

商家系统和微信支付系统主要交互说明:

步骤1:用户在商品APP选择商品,提交订单,选择微信支付.
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口.
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP.参与签名的字段名为appid,partnerId,prepayid,nonceStr,timestamp,package.注意:package的值为Sign=WXPay.
步骤4:商户APP调起微信支付.
步骤5:商户后台接受支付通知.
步骤6:商户后台查询支付结果

iOS端开发步骤说明

项目设置APPID

商户在微信开发平台申请开发APP应用后,微信开发平台会生成APP的唯一标识,APPID.在Xcode中打开项目,设置项目属性中的URL Sechemes为您的APPID.并在info.plist中设置白名单.

注册APPID

具体配置说明请参考微信支付官方文档
商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:

[WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];

调起支付

商户服务器端生成支付订单,先调用生成预订单,获取到prepay_id后将参数再次签名传输给APP发起支付.以下是调起微信支付的关键代码;

PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @"10000100";
request.prepayId= @"1101000000140415649af9fc314aa427";
request.package = @"Sign=WXPay";
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
request.timeStamp= @"1397527777";
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
[WXApi sendReq:request];

支付结果回调

在类实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:
首先在Appdelegate.m里面实现该方法

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url option:(NSDictionary <NSString  *id> *)options 
{
/**处理微信通过URL启动app是传递的数据
  *需要在 application:openURL:souceApplication:annotation或者application:handleOpenURL中调用.
  *@param url 微信启动第三方应用时传递过来的URL
  *@param delegate WXAppDelegate对象,用来接收微信触发的消息
  *@return 成功返回YES, 失败返回NO
*/
return [WXApi handleOpenURL:url delegate:self];
}

接下来我们需要遵守下协议

遵守WXapiDelegate协议.png

最后一步就是等待支付结果出来以后回调一个函数了.

/**发送一个sendReq后,收到微信的回应
   *收到一个来自微信的处理结果,调用一次sendReq后会收到OnResp;
   *可能收到的处理结果有SendMessageToWXResp,SendAuthResp等
   *@param resp具体的回应内容
*/
 -(void)onResp:(BaseResp*)resp{
              if ([respisKindOfClass:[PayRespclass]]){
                  PayResp*response=(PayResp*)resp;
                  switch(response.errCode){
                      caseWXSuccess:
                                //服务器端查询支付通知或查询API返回的结果再提示成功
                                NSlog(@"支付成功");
                        break;
                        default:
                        NSlog(@"支付失败,retcode=%d",resp.errCode);
                        break;
                  }
                    }
                } 

支付宝支付

支付宝支付大致流程:

a. 公司与支付宝进行签约,获取商户ID(partner)和账号ID(seller)和公钥(privateKey),这些开发中会用到,很重要!
b. 商户在b.alipay.com中进行签约.
c. 审核:商户登录py.alipay.com 可在”签约订单”中查看审核进度.
d. 下载支付宝SDK.
e. 生成订单,签名加密.
f. 开始支付,调起支付包客户端或者网页端,然后进行支付,由支付宝与银联系统进行系统进行打交道,并由支付宝处理的结果返回给客服端.
g. 展示支付结果给客户.

支付宝支付流程图.png

上图中的”商户客户端”就是iOS客户端需要做的事情.
a. 调用支付宝支付接口,发送订单
b. 处理支付宝返回的支付结果
注:在调用支付宝支付接口前,我们还需要生成一个订单,订单的生成可以放在客户端也可以放在服务器端,最好是放在服务器端,因为放在服务器端的话,你可以掌握所有的订单,而且也比较安全.

c.如果对安全性要求不高的做完以上两步支付功能已经完成.但是如果考虑安全性的问题,则需要在生成订单和支付结果的时候做一次安全校验,目前官方校验只支持使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名。

客户端集成支付宝SDK流程

步骤1:启动IDE(开发工具),如Xcode,在官方下载iOS支付宝SDK,解压文件并拷贝导入到项目目录中,添加必要的依赖库.

添加依赖库有.png

步骤2:在需要调用AlipaySDK的文件夹中,添加头文件引用

步骤3:组装请求信息(注:这一步应该在商户服务器端完成,商户服务器端直接将组装和签名后的请求字符串orderString传给客户端,客户端直接调用支付接口传给SDK发起支付请求), Alipay接口主要为商户提供订单支付功能。接口所提供的方法,如下表所示

支付宝支付功能接口列表.png

步骤4:配置支付宝客户端返回url处理方法.在Appdelegate中做一下demo业务处理

步骤5: 当这笔交易被买家支付成功后支付宝收银台上显示该笔交易成功,并提示用户“返回”。此时在APAppDelegate.m的 - (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 中调用获取返回数据的代码【iOS9.0以上(包括iOS9.0)需要在 - (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options 中执行 】

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{  
    [self alipayUrlAction:url];  
     return YES;  
}  
  
  
  
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  
    //有多中支付方式,要用scheme 来进行判断,看是那种途径的url.  
    [self alipayUrlAction:url];  
    return YES;  
}  
  
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{  
    [self alipayUrlAction:url];  
     return YES;  
}  
  
-(void)alipayUrlAction:(NSURL *)url{  
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {  
        if ([[resultDic valueForKey:@"resultStatus"] intValue] == 9000) {  
            if ([_aliDelegate respondsToSelector:@selector(alipydidSuccess)]) {  
                [_aliDelegate alipydidSuccess];  
            }  
        }else{  
            if ([_aliDelegate respondsToSelector:@selector(alipydidFaile)]) {  
                [_aliDelegate alipydidFaile];  
            }  
        }  
    }];  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容