2015-02-10 97 views

回答

0

我假設您的「未來付款」指的是預先批准的付款.. ??

設置一個IPN解決方案並確保Preapproval API請求中的IPNNotificationURL。 IPN將包括有關交易的更多細節,包括付款人的電子郵件地址。

Here is a list of the variables you can expect從預先批准的配置文件獲取創建。你會注意到「sender_email」參數,這是你要找的。

下面是我在處理Preapproval請求後在沙箱中獲得的實際IPN示例。

Array 
(
    [max_number_of_payments] => 100 
    [starting_date] => 2015-03-01T00:00:21.000-08:00 
    [pin_type] => NOT_REQUIRED 
    [max_amount_per_payment] => 20.00 
    [currency_code] => USD 
    [sender_email] => [email protected] 
    [verify_sign] => AFcWxV21C7fd0v3bYYYRCpSSRl31AiHQSQchSGUInXdtl6zomfkZ7H4C 
    [test_ipn] => 1 
    [date_of_month] => 0 
    [current_number_of_payments] => 0 
    [preapproval_key] => PA-2M0807730Y425554F 
    [ending_date] => 2015-12-31T23:59:21.000-08:00 
    [approved] => true 
    [transaction_type] => Adaptive Payment PREAPPROVAL 
    [day_of_week] => NO_DAY_SPECIFIED 
    [status] => ACTIVE 
    [current_total_amount_of_all_payments] => 0.00 
    [current_period_attempts] => 0 
    [charset] => windows-1252 
    [payment_period] => 0 
    [notify_version] => UNVERSIONED 
    [max_total_amount_of_all_payments] => 2000.00 
) 
0

Ichathan,你要利用MSDK的Profile Sharing功能來獲取客戶的屬性和範圍內,在未來的支付範圍傳遞給也爲那些獲得同意。您可以用於配置文件共享的可用範圍列在iOS SDK的PayPalOAuthScopes.h文件中。

0

這個answer是正確的,但不詳細。

Profile Sharing Mobile Integration允許用戶同意未來付款以及在一個登錄流程中獲取電子郵件和其他信息。下面是我們使用的片段:

func profileController() -> PayPalProfileSharingViewController { 
    PayPalMobile.preconnectWithEnvironment(PayPalEnvironmentSandbox)//PayPalEnvironmentNoNetwork) 
    let scope: Set<String> = Set([kPayPalOAuth2ScopeEmail, kPayPalOAuth2ScopeFuturePayments]) 
    let controller = PayPalProfileSharingViewController(scopeValues: scope, configuration: self.paypalConfiguration!, delegate: self) 
    return controller! 
} 

func payPalProfileSharingViewController(profileSharingViewController: PayPalProfileSharingViewController, userDidLogInWithAuthorization profileSharingAuthorization: [NSObject : AnyObject]) { 
    self.processAuthorization(profileSharingAuthorization) 
} 

func userDidCancelPayPalProfileSharingViewController(profileSharingViewController: PayPalProfileSharingViewController) { 
    self.delegate?.didFailPayPalConsent() 
} 

func processAuthorization(authorization: [NSObject: AnyObject]) { 
    if let authCode = authorization["response"]?["code"] as? String { 
     self.delegate?.didSucceedPayPalConsent(authCode) 
    } 
    else { 
     self.delegate?.didFailPayPalConsent() 
    } 
} 

編輯:移動控制器,爲您提供了對檔案信息的權限的身份驗證令牌,但你必須從您的服務器端代碼信息的另一個呼叫:

https://developer.paypal.com/docs/api/#get-user-information

0

這就是我做到的。 配置文件共享Paypal Profile Sharing給我們的身份驗證令牌 這種特殊的委託函數被調用

func payPalProfileSharingViewController(profileSharingViewController: PayPalProfileSharingViewController, userDidLogInWithAuthorization profileSharingAuthorization: [NSObject : AnyObject]) { 
self.processAuthorization(profileSharingAuthorization) 

}

的authToken之後,我們需要打一些服務器端API。我們也可以通過應用程序來實現這一點。我已經從客戶端打到服務器端apis

第一步是做一個基本的認證請求,它會返回一個刷新以及訪問令牌。 Get Access Token

func generateAccessToken(authCode : String ,block : completionHandler){ 
    let parameters = ["grant_type" : "authorization_code", "response_type" :"token","redirect_uri" : "urn:ietf:wg:oauth:2.0:oob","code":authCode] 
    let username = AppConstants().kPayPalUserName //APP_ID 
    let password = AppConstants().kPayPalSecret 

    let credentialData = "\(username):\(password)".data(using: String.Encoding.utf8)! 
    let base64Credentials = credentialData.base64EncodedString(options: []) 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 
    let customerURL = AppConstants().kPayPalUrl 
    Alamofire.request(customerURL, 
         method: .post, 
         parameters: parameters, 
         encoding: URLEncoding.default, 
         headers:headers) 
     .validate() 
     .responseJSON { response in 
      switch response.result { 
      case .success(let value): 
       KVNProgress.dismiss(completion: { 
        block?(true, value as! Dictionary<String, Any>) // get the accessToken 
       }) 

      // BasicFunctions.displayAlert("Success", needDismiss: false, title: "Task Created Successfully") 
      case .failure(let responseError): 


       KVNProgress.dismiss(completion: { 
        if (responseError != nil) { 
         BasicFunctions.displayAlert(SERVER_ERROR) 
         //             let json = JSONSerialization 
         // block!(false,responseError as! Dictionary<String, Any>) 
        }else{ 
         BasicFunctions.displayAlert(SERVER_ERROR) 
        } 
       }) 

      } 
    } 
} 

使用,我們需要打另一個CURL請求訪問令牌,它會給我們現在用這個要求,我們可以得到完整的用戶信息的所有用戶信息Get User Profile Information

。訪問令牌是由基本身份認證令牌生成

func getUserProfileInfo(accessToken : String,block : completionHandler){ 

    KVNProgress.show() 
    let parameters = ["":""] 


    let headers = ["Authorization": "Bearer " + accessToken] 

    let customerURL = "https://api.sandbox.paypal.com/v1/identity/openidconnect/userinfo/?schema=openid" 


    Alamofire.request(customerURL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in 
     switch response.result { 
     case .success(let value): 
      KVNProgress.dismiss(completion: { 
       block?(true, value as! Dictionary<String, Any>) 
      }) 

     // BasicFunctions.displayAlert("Success", needDismiss: false, title: "Task Created Successfully") 
     case .failure(let responseError): 


      KVNProgress.dismiss(completion: { 
       if (responseError != nil) { 
        BasicFunctions.displayAlert(SERVER_ERROR) 
        //             let json = JSONSerialization 
        // block!(false,responseError as! Dictionary<String, Any>) 
       }else{ 
        BasicFunctions.displayAlert(SERVER_ERROR) 
       } 
      }) 

     } 
    } 
} 

注意:確保在貝寶的應用程序設置您已允許訪問電子郵件或其他用戶信息

免責聲明:本項目僅是爲一個POC,所以我不確定我們是否通過從客戶端點擊服務器端API來違反PCI合規性