PayPal iOS 集成攻略

作者: yzhxcql | 来源:发表于2016-05-12 14:24 被阅读5499次
这两天在研究如何在项目中集成PayPal的iOS SDK 但是百度到的资料很少,研究了两天拿出来和大家分享下,共同讨论共同成长。

这里以PayPal的官方demo为例,sdk和demo地址在这里:paypal

  • 安装流程建议使用CocoaPods,喜欢配置依赖库的小伙伴自行百度

准备事项

  • 预先善其事,必先利其器

首先你得注册个paypal账号,连账号都没有谁给你钱啊

  1. 登录paypal开发者网站。 点这里
  2. 右上角看到了没有,不上图了。有账号的登录,没账号的注册。
  3. 在上面的 DASHBOARD 页面下,找到 Creat APP ,点它!创建一个阿啪啪出来。 创建一个阿啪啪
  4. 我们来到创建阿啪啪的页面,这里需要输入一个阿啪啪名字以及选择一个账户,名字没问题,可是这个账户怎么来的?这个稍后说,选上就行了。名字填好后,点击Creat App
  5. 来到我们的阿啪啪页面,这里是查看你的应用信息的地方。右上角分别对应着你的应用的测试模式真实交易模式,点击切换会看到不同的API CREDENTIALS 内容,分别是在测试模式真实交易模式下不同的AccountClient IDSecret。这里掏出小本本,记下测试模式下的Client ID,之后会用到。
  6. 接下来,选择右边的SandboxAccounts选项。Sandbox就是测试环境,其中包含了你的账户信息、通知消息、交易记录等等。。(其实我不知道后面那三个干嘛的,因为没用到)。
    而在现在所看到的Accounts中,你会看到两个账号,第一个就是测试模式下,你的商家账号。在你的阿啪啪中产生的所有虚拟交易,其金额都会流入到这个账号下。而第二个,不用说你也猜到,就是在虚拟交易中扮演顾客的账号。右上角可以添加账号,具体玩法自行摸索,这里不多说了。
  7. 轻轻的点下你的商家账号。弹出的框选择Profile。展示的是这个账号的Account Details,第一个就是你的账号基本信息,包括你的邮箱、密码、电话号、账号类型、状态和城市。
  • 上面的标签随便看看就好。其中的 Funding 包含了你的虚拟商家账号的信用卡信息和 Balance 我的理解就是paypal余额。此时Balance 后面应该是没有余额的。
  • 同样的,点开顾客账号的Profile。展示的是你的顾客的账户信息。此时我建议点击Change password修改一个好记的交易密码。不改的话就是你创建账号时候的密码,我猜的。同样的, Funding 包含了你的虚拟商家账号的信用卡信息和 Balance,此时Balance 后面的数字应该是$9999.9。

准备工作基本上是完成了,下面看看如何进行虚拟支付

  • 现在我当做你已经把paypal的sdk pod到你的项目中去了。
  • 正如所有sdk一样,一定要做的是事情是什么??没错,就是导入头文件!!!
  • 然后,来到AppDelegate.m文件的didFinishLaunchingWithOptions
 [PayPalMobile initializeWithClientIdsForEnvironments:@{PayPalEnvironmentProduction : @"你的真实交易模式ClientID",PayPalEnvironmentSandbox : @"你的测试模式ClientID"}]; 
  • 填好你的测试模式ClientID后我们继续

简单交代下集成paypal的支付流程:

  1. 配置paypal SDK连接环境如:测试环境、真实环境
  2. 配置paypal一些参数如:商家名字、地址选项、商家隐私政策和用户协议网址等
  3. 配置支付相关如:订单总额、货币类型和订单描述等
  4. 提交订单,通过代理回调支付状态

老司机要开车了,请坐稳

简单说下原理,paypal的支付并不唤起客户端,也就是说并不要求用户安装 paypal APP,支付的流程产生在paypal的sdk中已经封装好的VC中。你要做的就是设置参数和弹出paypal的VC以及处理后续的回调。

天才纸尿裤,我是第一步:

  • 首先,我建议你要有一个订单处理类。你的生成订单VC传进订单总额(有需要的话传进商品数组)给订单处理类,这个类会提供block完成后续的操作如:订单VC弹出PayPal的VC,支付完成后订单VCdismiss掉paypal的VC以及用户取消付款订单VC处理事情等等。

  • 现在就简单点,先让订单VC把所有的事都干了。

- 配置支付环境
[PayPalMobile preconnectWithEnvironment:PayPalEnvironmentSandbox];

  • 以下是环境说明
/// 真实交易环境-也就是上架之后的环境
extern NSString * _Nonnull const PayPalEnvironmentProduction;
/// 模拟环境-也就是沙盒环境
extern NSString * _Nonnull const PayPalEnvironmentSandbox;
/// 无网络连接环境-具体用处,咳咳,自行摸索
extern NSString * _Nonnull const PayPalEnvironmentNoNetwork;

第二步:paypal配置

首先让你的订单VC有一个属性

@property(nonatomic, strong) PayPalConfiguration *payPalConfig;

然后配置它

//是否接受信用卡
 _payPalConfig.acceptCreditCards = NO;
 
 //商家名称
 _payPalConfig.merchantName = @"商家名";
 
 //商家隐私协议网址和用户授权网址-说实话这个没用到
 _payPalConfig.merchantPrivacyPolicyURL = [NSURL URLWithString:@"https://www.paypal.com/webapps/mpp/ua/privacy-full"];
  _payPalConfig.merchantUserAgreementURL = [NSURL URLWithString:@"https://www.paypal.com/webapps/mpp/ua/useragreement-full"];
  
  //设置地址选项-在支付页面可选择账户地址信息
  typedef NS_ENUM(NSInteger, PayPalShippingAddressOption) {
  //不展示地址信息
  PayPalShippingAddressOptionNone = 0,
  //这个没试过,自行查阅
  PayPalShippingAddressOptionProvided = 1,
  //paypal账号下的地址信息
  PayPalShippingAddressOptionPayPal = 2,
  //全选
  PayPalShippingAddressOptionBoth = 3,
};

  //paypal账号下的地址信息
  _payPalConfig.payPalShippingAddressOption = PayPalShippingAddressOptionPayPal;
  
  //配置语言环境
  _payPalConfig.languageOrLocale = [NSLocale preferredLanguages][0];

第三步:配置支付相关信息

  • 这里只写下简单版,如果想要把订单中所有商品信息添加进去自行查看官方demo吧,很简单的
PayPalPayment *payment = [[PayPalPayment alloc] init];

//订单总额
payment.amount = [NSDecimalNumber decimalNumberWithString:@"100"];

//货币类型-RMB是没用的
payment.currencyCode = @"USD";

//订单描述
payment.shortDescription = @"Hipster clothing";    

第四步:提交订单-最重要也是最简单的一步

//生成paypal控制器,并模态出来(push也行)
//将之前生成的订单信息和paypal配置传进来,并设置订单VC为代理 
PayPalPaymentViewController *paymentViewController = [[PayPalPaymentViewController alloc] initWithPayment:payment                                                                                            configuration:self.payPalConfig                                                                                                  delegate:self];
 
//模态展示
[self presentViewController:paymentViewController animated:YES completion:nil];
之后就是顾客账户上场了
  • 找到你的顾客账号,记着不是商家账号。拿到邮箱和密码。邮箱是上面显示的buyer的邮箱。密码如果修改过就是修改后的密码,没改过应该就是注册时填的登陆密码。�

  • 在付款页面登陆你的账号。登陆成功之后,你会看到你即将支付的订单总额,你的账号名字以及你的paypal支付方式选项,默认是余额Balance支付。如果你开通了信用卡支付,可选择信用卡。

  • 最后,毫不犹豫的点下那个蓝色的Pay

  • 不出意外都会支付成功的

最后:监测订单状态

  • 你的订单VC要遵从 PayPalPaymentDelegate 协议
  • 实现协议的方法如下:
//订单支付完成后回调此方法
- (void)payPalPaymentViewController:(PayPalPaymentViewController *)paymentViewController didCompletePayment:(PayPalPayment *)completedPayment {
  NSLog(@"PayPal Payment Success!");
}

//用户取消支付回调此方法
- (void)payPalPaymentDidCancel:(PayPalPaymentViewController *)paymentViewController {
  NSLog(@"PayPal Payment Canceled");
}
到这里支付流程就完成了,但是你可能还需要向服务器发送一些东西,让服务器验证本次订单有效性
//回调的 PayPalPayment 的 confirmation 属性包含此次订单的状态信息包括校验码,服务器可已通过该校验码验证交易真实性。
//返回数据 - id所对应的就是校验码。
{
    client =     {
        environment = sandbox;
        "paypal_sdk_version" = "2.14.2";
        platform = iOS;
        "product_name" = "PayPal iOS SDK";
    };
    response =     {
        "create_time" = "2016-05-12T03:25:49Z";
        id = "PAY-6BG56850AF923584SK4Z7PNQ";
        intent = sale;
        state = approved;
    };
    "response_type" = payment;
}

最后的最后:

有小伙伴在关心之前在阿啪啪中产生的交易怎么知道呢?

来到paypal开发者网站,登陆后向左看。选择Sandbox中的Notification选择。这里就是所有的交易通知,包括商家账户和顾客账户。

以上,就是模拟环境下进行paypal支付的全过程。如果要进行真实交易,就要先注册business账户。总的来说,只要得到真实交易模式下的clientID就能够发起真实交易了。

全文完。

相关文章

  • PayPal iOS 集成攻略

    这两天在研究如何在项目中集成PayPal的iOS SDK 但是百度到的资料很少,研究了两天拿出来和大家分享下,共同...

  • PayPal iOS 集成攻略-swift3.0

    swift项目中用到paypal支付,看到网上关于paypal的资料很少,而且基本都是OC的,于是记录下来项目中用...

  • Paypal支付集成 iOS

    集成流程: 1.去paypal开发者网站注册开发账号,在Dashboard里新增sandbox测试账号,并注册ap...

  • iOS 集成PayPal付款

    1、使用cocoapods pod'PayPal-iOS-SDK' 2、AppDelegate 中key 的设置...

  • iOS braintree sdk for paypal 集成

    1、创建paypal的App 注册paypal business账号点击My Apps & Credentials...

  • iOS 集成 Braintree (Paypal) 支付

    我这里用到的是 自定义 UI 以及 一次性付款,也就是官方所说的 Checkout with PayPal 。 参...

  • iOS PayPal集成和使用

    一、创建并获取对应的ClientID 1、登录paypal开发者网站 PayPal开发者官网地址:https://...

  • Android接入PayPal支付

    前言 因业务需要,需要集成PayPal支付,故一边研究并顺便分享一下集成步骤。附上相关文档:PayPal集成官方文...

  • Paypal

    sdk下载地址: https://github.com/paypal/PayPal-iOS-SDK 最近项目要求做...

  • paypal注册攻略

    来自闪电战博客 paypal帐户类型主要有三种::1. 个人账户2. 高级账户3. 企业帐户一般建议注册高级账号或...

网友评论

  • 完全:创建项目的时候输入中文 说是特殊字符咋回事啊
  • F麦子:大哥,PayPal集成难不难啊,我下个项目要写,有点害怕,只集成过微信和iOS,
  • ChrisPaulss:写的特别详细 很棒!很赞。
  • 巧克力色可可:楼主的阿啪啪是真的骚
  • LiWeiJ:你好 我在支付完成后返回的回调里state却不是approved,而是state = created,请问这是什么问题呢
    bb4cf902bdbc:@Adoma 楼主你好,我这边在集成的时候,如何和自己的服务器关联呢,我看本文章介绍 ,是在贝宝支付成功后,回调服务器做一个验证,这时候如果贝宝支付成功,但是验证服务器失败了怎么办呢?
    LiWeiJ:@Adoma dead
    yzhxcql:用id反查下订单状态看看是什么
  • skylor:请问客户端怎么与自己都服务端关联起来呢?官网上看到还有个令牌token,客户端拿到这个token,但PayPal的SDK没有地方来接收这个token呢?谢谢
    f036ff039df0:嗯嗯,我现在用braintree
    skylor:@CoderMI 这种集成方式没有关联的 换个其它的
    f036ff039df0:你好,我也碰到这个问题了,请问你是怎么解决的?
  • 这孩子有点傻:楼主有的demo会集成opencv_core.a ,请问一下opencv_core主要是用在paypal 哪些方面的?
    yzhxcql:@这孩子有点傻 哪个是有的?paypal的官方demo吗
  • Riven2018:创建app的按钮是灰色点不了,怎么回事。。。
    Riven2018:@Adoma 今天亮了,可能是需要时间的吧
    yzhxcql:@WYX_a1d9 没有提示啥的么。。
  • Guow110:楼主,我现在是测试已经OK了,公司也有收款账户 ,怎么创建app呢
    yzhxcql:虽然老了点,但流程还是差不多的
  • 32d2543848c0:楼主你好。我想问下这个SDK不需要token验证啥的对吧?不想用Braintree,那个界面不支持9.0之前的,但是觉得这个SDK没有token验证的话,会不会不安全?
    32d2543848c0:@Adoma 好的,谢谢
    yzhxcql:@Sunshine_4bd8 它和你的后台没交互的,你所做的就是拿到支付成功后的id自己和后台做校验
  • biny_ios:这文档很久的了吧
  • biny_ios:作者,没看到swift的流程啊。。。
  • 钟高荣:你好,可以请教你问题吗? 我现在集成了paypal, 商家帐号是香港的, 测试的用户帐号是国内的, 现在用Sandbox测试是没有问题的, 把环境切换到 live, 就会出现付款的时候,登录用户 (帐号密码正确), 就会弹出来: 很抱歉, 设置此付款时出现问题。 请访问Paypal网站并检查您的账户。 错误代码为 :

    Filtering mail sheet accounts for bundle ID: zz.mycompany.PayPal-iOS-SDK-Sample-App, source account management: 1
    2017-05-03 13:40:10.323765 PayPal-iOS-SDK-Sample-App[4761:1541481] [MC] Result: YES
    2017-05-03 13:40:16.586374 PayPal-iOS-SDK-Sample-App[4761:1541481] PayPal SDK: Request has failed with error: PAYMENT_CREATION_ERROR - 设置此付款时出现问题。请访问PayPal网站并检查您的账户。 (422) | PayPal Debug-ID: ac71137ec658f, ac71137ec658f [live, PayPal iOS SDK 2.16.2]
    yzhxcql:@钟高荣 支付的不是中国的就行
    钟高荣:@Adoma ,现在我是paypal商户帐号用的香港的, 然后支付账户是用的国内的。 那你的意思是 , 商户帐号是中国的, 然后支付账户是国外的,这样才行吗?
    yzhxcql:@钟高荣 国内账户是不能付款的
  • 30e023a6a9e3:请问,paypal的支付流程是不是和微信的不一样啊?
    paypal好像在支付之前是没有到自己的服务器上请求的?是支付之后才到服务器请求确认的吗?
    30e023a6a9e3:@Adoma 也就是说后台服务器只和paypal交互一次吗?就是,在用户app提交验证码到后台服务器,后台服务器就和paypal服务器验证请求,然后paypal就转账.是这个意思吗?能加个QQ,或者微信好友吗?想请教几个问题,谢谢.我的QQ:496794276 微信:WYC496794276
    yzhxcql:@30e023a6a9e3 paypal不和服务器沟通的,除非webhook。支付都在前端,成功之后你需要主动向服务器校验订单。
  • 785c52f271d5:PayPal ios端安全性怎么实现的?
  • e939502bbb11:不懂如何切換真實交易
    並且測試....有無大神可以解答?
  • OlsonXia:楼主,我的app集成了paypal sdk,沙盒环境没有问题,但是打出来的上线appstore的包,装登录paypal的时候显示还是沙盒环境,怎么才能切换到线上真是环境呢?
  • 785c52f271d5:怎么我注册登录后创建app 没有模拟账号可选?
  • 26a0ee7c0683:博主,模拟操作的时候会有这个提示是什么地方没设好?!
    -canOpenURL: failed for URL: "org-appextension-feature-password-management://" - error: "(null)"
  • 老友_:可以,挺6的:no_mouth:
  • 晴天等不到你:更改了货币单位为SGD(新加坡货币单位),但是跳进paypal的vc时候还是显示美元符号$,博主有研究吗?
    yzhxcql:@晴天等不到你 恩
    晴天等不到你:@Adoma 博主的意思是直接显示$是没有错的是吗?
    yzhxcql:通用美元
  • 8be7e754ee7a:沙盒模式是可以支付成功的,但是生产模式就一直报这个错误,请问谁遇到过
    PayPal SDK: Request has failed with error: invalid_user - Incorrect username/password. Please try again. (401) | PayPal Debug-ID: de444ef4bd893, de444ef4bd893 [live, PayPal iOS SDK 2.14.5] | Details: (
    {
    "error_description" = "Invalid user credentials";
    }
    ).
    8be7e754ee7a:@功夫肥猫靈靈九 后来我给Paypal发邮件问了这个问题,他们说是中国的用户不能给中国商户付款
    f81c8c954040:@拿着双猫被春天 请问你是怎么解决这个问题的
    8be7e754ee7a:账号密码是正确的.我在网页端登录过.账号密码也输入好多遍
  • Scott_Dove:没有创建app的按钮 是什么原因
  • Carl_Cfy:作者在吗,求助paypal支付问题,QQ 312584069 谢谢!
  • 96614bc8d3db:博主,怎么让app自己去验证这次支付的有效性?
  • a2168803d972:博主,支付失败的时候是不是没有代理方法走啊,- (void)payPalPaymentViewController:(PayPalPaymentViewController *)paymentViewController didCompletePayment:(PayPalPayment *)completedPayment {
    NSLog(@"PayPal Payment Success!");
    }这个是支付成功才走的吗?要是中间支付失败了,怎么获取失败原因啊?谢谢博主
    yzhxcql:@FarFrom 还有一个取消的代理方法,支付失败的话是不跳出paypal的控制器的。所以,要么完成要么取消。
  • NSMutableHeart:共同讨论共同成长!为你的分享精神点赞!
  • 疾风小超:博主,Paypal的自动扣款功能你研究过没有?
  • RichardZhao:你好 paypal直连你研修过吗
  • Machine_C:博主你好,请问为什么我集成paypal SDK后,paypal控制器里的弹出窗都是黑色的,里面的提示语透明度降的很低很低,几乎看不到了。。。
  • Derrick_P:为什么我把扫描信用卡的功能关了后,点击log in都没反应了啊
  • 0d4cd077cefc:你好 为什么我选择pay with card 支付时就会崩掉 我把acceptCreditCards设置为YES,也就是允许信用卡支付
    f81c8c954040:需要引入 CardIO
    reyzhang:@Adoma 出现同楼上一样的问题。 不知楼主能否给解答一下
    yzhxcql:@0d4cd077cefc 崩掉不可能吧,注册时填的国家是中国的话不能用信用卡的。不支持。会提示账号错误。
  • 懒惰的习惯: 你好,怎么设置创建app应用时的sandbox developer account啊?我在创建的时候,这个没有值。
    灬暮Se丶毛虫:这个没有值,需要等一段时间。我刚开始也遇到了这个问题。是账号还是处于正在处理状态。

本文标题:PayPal iOS 集成攻略

本文链接:https://www.haomeiwen.com/subject/kghprttx.html