PayPal-iOS-集成攻略

戚勇
2023-12-01

ps:转自我自己的简书

这两天在研究如何在项目中集成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就能够发起真实交易了。

全文完。

 类似资料: