PayPal iOS 集成攻略

2019.5.7 更

評論說官方在github的demo和sdk已經無法下載。去看了下,被archive了。
官網逛了一圈,developer.paypal.com。
原來的什么名字忘記了,現在叫payments pro。然而只支持api調用貌似。并且僅限英美加拿大。
有需要的小伙伴考慮用braintree吧。

這兩天在研究如何在項目中集成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就能夠發起真實交易了。

全文完。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容