我們在IOS應用程序中使用PayPal未來付款。我們需要知道已授權未來付款的帳戶的電子郵件ID。我們如何獲取已授權未來付款的用戶的電子郵件ID。當前用於批准的API操作僅返回授權令牌。已批准未來付款的用戶的PayPal電子郵件ID
回答
我假設您的「未來付款」指的是預先批准的付款.. ??
設置一個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
)
Ichathan,你要利用MSDK的Profile Sharing功能來獲取客戶的屬性和範圍內,在未來的支付範圍傳遞給也爲那些獲得同意。您可以用於配置文件共享的可用範圍列在iOS SDK的PayPalOAuthScopes.h文件中。
這個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()
}
}
編輯:移動控制器,爲您提供了對檔案信息的權限的身份驗證令牌,但你必須從您的服務器端代碼信息的另一個呼叫:
這就是我做到的。 配置文件共享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合規性
- 1. Paypal IPN和付款人電子郵件
- 2. 用Paypal網站付款標準購買後顯示用戶的電子郵件
- 3. Paypal REST API:如何在用戶批准付款後檢索付款ID。
- 4. 並行預先批准的PayPal付款?
- 5. NetSuite電子郵件 - 付款
- 6. Paypal網上未來付款
- 7. 簡單的PayPal付款方式或電子郵件鏈接
- 8. 利用PayPal API向電子郵件發送單一付款
- 9. 請求客戶在付款時使用特定的PayPal電子郵件地址
- 10. PayPal付款收據顯示錯誤'付款發送到'電子郵件地址
- 11. 通過電子郵件發送文件Paypal付款後收到
- 12. PayPal DoDirectPayment PHP支付的電子郵件
- 13. Magento PayPal付款專業版不發送確認電子郵件
- 14. 停止PayPal發送自動付款訂閱電子郵件
- 15. 創建PayPal發票,標記已付款併發送電子郵件
- 16. 原生移動應用一次批准付款和未來付款
- 17. php電子郵件批准
- 18. PayPal付款標準過期
- 19. 用Paypal付款給用戶
- 20. 使用PayPal付款付款
- 21. 哪些Paypal API用於預先批准的付款?
- 22. 將用戶電子郵件與來自IPN的PayPal電子郵件相匹配
- 23. Paypal Rest API - 使用PayPal帳戶付款資源創建付款
- 24. PayPal付款專業版和未來付款
- 25. Paypal API - 客戶接受來自其客戶的PayPal付款
- 26. 如何從PayPay iOS SDK獲取付款人電子郵件ID
- 27. 批准的PayPal SDK付款不上沙盒儀表板出現
- 28. 設置PayPal付款批准的默認視圖
- 29. Paypal付款標準不返回iPad上的付款變量
- 30. Facebook的一批API不返回用戶的電子郵件ID