PayPal Java SDKの完全な例–Javaクライアントを使用してPayPal認証RESTAPIを呼び出す方法は?
公開: 2019-03-18 PayPal
は、最高のオンラインPayment
転送サービスの1つです。 それが狂った数で日々成長していることは間違いありません。
私は個人的にPayPalJava PayPal Java Developer APIs
の実務経験があり、私の経験をすべてのCrunchifyリーダーと共有したいと思います。
このチュートリアルでは、PayPal JavaSDKの最新バージョンである1.14.0
を使用します。
これは、JavaEclipseプロジェクトに追加するMavenの依存関係です。
1 2 3 4 5 |
< dependency > < groupId > com . paypal . sdk < / groupId > < artifactId > rest - api - sdk < / artifactId > < version > LATEST < / version > < / dependency > |
上記のPayPalMaven依存関係をJavaプロジェクトに追加すると、ラップトップ/デスクトップに表示されます。
このチュートリアルの目的
- PayPal APIを使用すると、顧客のアカウント
put hold
にすることができます - 同じようにあなたはあなたの購入のためにすぐに
capture money
を集めることができます - APIを使用して顧客に
refund
できます - また、以前にアカウントに設定した
void any hold
にします - 上記のすべての操作を実行できる簡単な手順があり、それがこのチュートリアルで行います。 主にお客様の口座をホールドさせていただきます。
私が必要なものは何?
PayPalアカウントが必要です。 以下の手順に従ってください。
-
official PayPal
アカウントを作成する - 次のリンクを使用してPayPalの開発者ポータルにログインします:https://developer.paypal.com/developer/applications
- 次のリンクを使用して新しいアプリを作成します:https://developer.paypal.com/developer/applications/create
-
paypalContext
を生成するためにプログラムで必要なClientID
とClientSecret
を取得します。
y0uがClientIDとClientSecretを取得したら、次はJavaプログラムcrunchifyCapturePayPalAPI.javaの作成を開始します。
このプログラムの完全なロジックは次のとおりです。
-
Payer
オブジェクトを作成し、PaymentMethodを設定します RedirectUrls
を設定し、cancelURLとreturnURLを設定しますDetails
の設定とPaymentDetailsの追加Amount
を設定するTransaction
設定- 支払いの詳細を追加し、
authorize
意図を設定します clientID
、clientSecret
、およびmode
を渡してAPIContextを作成しますPayment
オブジェクトを作成し、paymentIDを取得しますpayerID
をPaymentExecutionオブジェクトに設定しますExecute Payment
し、承認を取得します
完全なコード:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
package crunchify . com . paypal . sdk ; import java . util . ArrayList ; import java . util . List ; import com . paypal . api . payments . Amount ; import com . paypal . api . payments . Authorization ; import com . paypal . api . payments . Details ; import com . paypal . api . payments . Links ; import com . paypal . api . payments . Payer ; import com . paypal . api . payments . Payment ; import com . paypal . api . payments . PaymentExecution ; import com . paypal . api . payments . RedirectUrls ; import com . paypal . api . payments . Transaction ; import com . paypal . base . rest . APIContext ; import com . paypal . base . rest . PayPalRESTException ; /** * @author Crunchify.com * Version: 1.1.0 * */ public class CrunchifyPayPalSDKTutorial { private static String crunchifyID = "<!---- Add your clientID Key here ---->" ; private static String crunchifySecret = "<!---- Add your clientSecret Key here ---->" ; private static String executionMode = "sandbox" ; // sandbox or production public static void main ( String args [ ] ) { CrunchifyPayPalSDKTutorial crunchifyObj = new CrunchifyPayPalSDKTutorial ( ) ; // How to capture PayPal Payment using Java SDK? doCapture() PayPal SDK call. crunchifyObj . crunchifyCapturePayPalAPI ( ) ; } // This is simple API call which will capture a specified amount for any given // Payer or User public void crunchifyCapturePayPalAPI ( ) { /* * Flow would look like this: * 1. Create Payer object and set PaymentMethod * 2. Set RedirectUrls and set cancelURL and returnURL * 3. Set Details and Add PaymentDetails * 4. Set Amount * 5. Set Transaction * 6. Add Payment Details and set Intent to "authorize" * 7. Create APIContext by passing the clientID, secret and mode * 8. Create Payment object and get paymentID * 9. Set payerID to PaymentExecution object * 10. Execute Payment and get Authorization * */ Payer crunchifyPayer = new Payer ( ) ; crunchifyPayer . setPaymentMethod ( "paypal" ) ; // Redirect URLs RedirectUrls crunchifyRedirectUrls = new RedirectUrls ( ) ; crunchifyRedirectUrls . setCancelUrl ( "http://localhost:3000/crunchifyCancel" ) ; crunchifyRedirectUrls . setReturnUrl ( "http://localhost:3000/crunchifyReturn" ) ; // Set Payment Details Object Details crunchifyDetails = new Details ( ) ; crunchifyDetails . setShipping ( "2.22" ) ; crunchifyDetails . setSubtotal ( "3.33" ) ; crunchifyDetails . setTax ( "1.11" ) ; // Set Payment amount Amount crunchifyAmount = new Amount ( ) ; crunchifyAmount . setCurrency ( "USD" ) ; crunchifyAmount . setTotal ( "6.66" ) ; crunchifyAmount . setDetails ( crunchifyDetails ) ; // Set Transaction information Transaction crunchifyTransaction = new Transaction ( ) ; crunchifyTransaction . setAmount ( crunchifyAmount ) ; crunchifyTransaction . setDescription ( "Crunchify Tutorial: How to Invoke PayPal REST API using Java Client?" ) ; List < Transaction > crunchifyTransactions = new ArrayList < Transaction > ( ) ; crunchifyTransactions . add ( crunchifyTransaction ) ; // Add Payment details Payment crunchifyPayment = new Payment ( ) ; // Set Payment intent to authorize crunchifyPayment . setIntent ( "authorize" ) ; crunchifyPayment . setPayer ( crunchifyPayer ) ; crunchifyPayment . setTransactions ( crunchifyTransactions ) ; crunchifyPayment . setRedirectUrls ( crunchifyRedirectUrls ) ; // Pass the clientID, secret and mode. The easiest, and most widely used option. APIContext crunchifyapiContext = new APIContext ( crunchifyID , crunchifySecret , executionMode ) ; try { Payment myPayment = crunchifyPayment . create ( crunchifyapiContext ) ; System . out . println ( "createdPayment Obejct Details ==> " + myPayment . toString ( ) ) ; // Identifier of the payment resource created crunchifyPayment . setId ( myPayment . getId ( ) ) ; PaymentExecution crunchifyPaymentExecution = new PaymentExecution ( ) ; // Set your PayerID. The ID of the Payer, passed in the `return_url` by PayPal. crunchifyPaymentExecution . setPayerId ( "<!---- Add your PayerID here ---->" ) ; // This call will fail as user has to access Payment on UI. Programmatically // there is no way you can get Payer's consent. Payment createdAuthPayment = crunchifyPayment . execute ( crunchifyapiContext , crunchifyPaymentExecution ) ; // Transactional details including the amount and item details. Authorization crunchifyAuthorization = createdAuthPayment . getTransactions ( ) . get ( 0 ) . getRelatedResources ( ) . get ( 0 ) . getAuthorization ( ) ; log ( "Here is your Authorization ID" + crunchifyAuthorization . getId ( ) ) ; } catch ( PayPalRESTException e ) { // The "standard" error output stream. This stream is already open and ready to // accept output data. System . err . println ( e . getDetails ( ) ) ; } } private void log ( String string ) { System . out . println ( string ) ; } } |
Eclipseコンソールの出力:
デフォルトでは、PayPal SDKはDEBUGモードを有効にしているため、Eclipseコンソールへのすべての要求と応答をログに記録します。
詳細については、DEBUGモードをオンのままにして、getAuthorizationCallの詳細な結果をここに提供しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
13 : 22 : 28.013 [ main ] DEBUG com . paypal . base . ConfigManager - sdk_config . properties not present . Skipping . . . 13 : 22 : 28.212 [ main ] DEBUG com . paypal . base . rest . OAuthTokenCredential - request header : { Authorization = Basic QVNuZG9aaEdGOEg1MFFQSWw5TGl0elhwSDVYTW16YlBwZmxJREFJOGVjUWVwdlJyWVQ4UnBfZUpNQmh1dHJVUHdaZU9CVGJUOE1GRksdfgsdfgsdfg3Q1ZLd0NzZTllRnBIZTNNNWpOR1liNHVxZ3BrNDNFVmFXR2hHNXR2Tk1na1IyZkZMUWdTUmRFY3Q3cG8 = , Accept = application / json , User - Agent = PayPalSDK / PayPal - Java - SDK 1.14.0 ( v = 11 ; vendor = Oracle Corporation ; bit = 64 ; os = Mac_OS_X 10.14.1 ) , Content - Type = application / x - www - form - urlencoded } 13 : 22 : 28.212 [ main ] DEBUG com . paypal . base . rest . OAuthTokenCredential - request body : grant_type = client_credentials 13 : 22 : 28.213 [ main ] DEBUG com . paypal . base . HttpConnection - curl command : curl -- verbose -- request POST 'https://api.sandbox.paypal.com/v1/oauth2/token' \ -- header "Authorization:Basic QVNuZG9aaEdGOEg1MFFQSWw5TGl0elhwSDVYTW16YlBwZmxJREFJOGVjUasdfasdflITlhSZ0xVMGhiOHhpa0M3Q1ZLd0NzZTllRnBIZTNNNWpOR1liNHVxZ3BrNDNFVmFXR2hHNXR2Tk1na1IyZkZMUWdTUmRFY3Q3cG8=" \ -- header "Accept:application/json" \ -- header "User-Agent:PayPalSDK/PayPal-Java-SDK 1.14.0 (v=11; vendor=Oracle Corporation; bit=64; os=Mac_OS_X 10.14.1)" \ -- header "Content-Type:application/x-www-form-urlencoded" \ -- data 'grant_type=client_credentials' 13 : 22 : 28.810 [ main ] DEBUG com . paypal . base . rest . OAuthTokenCredential - response header : { paypal - debug - id = [ 961e2e4122ac1 ] , null = [ HTTP / 1.1 200 OK ] , Paypal - Debug - Id = [ 961e2e4122ac1 ] , Server = [ Apache ] , Connection = [ close ] , Vary = [ Authorization ] , Set - Cookie = [ X - PP - SILOVER = ; Expires = Thu , 01 Jan 1970 00 : 00 : 01 GMT , X - PP - SILOVER = name % 3DSANDBOX3.API.1 % 26silo_version % 3D1880 % 26app % 3Dapiplatformproxyserv % 26TIME % 3D4098358363 % 26HTTP_X_PP_AZ_LOCATOR % 3Dsandbox.slc ; Expires = Mon , 26 Nov 2018 19 : 52 : 28 GMT ; domain = . paypal . com ; path =/ ; Secure ; HttpOnly ] , HTTP_X_PP_AZ_LOCATOR = [ sandbox . slc ] , Content - Length = [ 876 ] , X - PAYPAL - TOKEN - SERVICE = [ IAAS ] , Date = [ Mon , 26 Nov 2018 19 : 22 : 28 GMT ] , Content - Type = [ application / json ] } 13 : 22 : 28.810 [ main ] DEBUG com . paypal . base . rest . OAuthTokenCredential - response : { "scope" : "https://api.paypal.com/v1/payments/.* https://uri.paypal.com/services/payments/refund https://uri.paypal.com/services/applications/webhooks https://uri.paypal.com/services/payments/payment/authcapture https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/disputes/read-seller https://uri.paypal.com/services/subscriptions https://uri.paypal.com/services/disputes/read-buyer https://api.paypal.com/v1/vault/credit-card openid https://uri.paypal.com/services/disputes/update-seller https://uri.paypal.com/services/payments/realtimepayment" , "nonce" : "2018-11-26T19:03:03ZymZQ8MNE2MarndZEjUoxwB70puoxUA-NXqc7pUVtVxk" , "access_token" : "A21AAGyWgsdafxUM_1FCE5d9adsfuwfiOB7_4XkX3wKHWXe3nkKgt2bhadflirJsMWP9JAm-pBT2DtUJ5W0A" , "token_type" : "Bearer" , "app_id" : "APP-80W284ads543T" , "expires_in" : 31235 } 13 : 22 : 28.817 [ main ] DEBUG com . paypal . base . rest . PayPalResource - request header : { Authorization = Bearer A21AAGyWgsdafxUM_1FCE5d9adsfuwfiOB7_4XkX3wKHWXe3nkKgt2bhadflirJsMWP9JAm - pBT2DtUJ5W0A , User - Agent = PayPalSDK / ( v = 11 ; vendor = Oracle Corporation ; bit = 64 ; os = Mac_OS_X 10.14.1 ) , PayPal - Request - Id = 74886e72 - 34e4 - 4a0 - 8cd7 - 6adsf63b5dc9 , Accept = application / json , Content - Type = application / json } 13 : 22 : 28.817 [ main ] DEBUG com . paypal . base . rest . PayPalResource - request body : { "intent" : "sale" , "payer" : { "payment_method" : "paypal" } , "transactions" : [ { "amount" : { "currency" : "USD" , "total" : "6.66" , "details" : { "subtotal" : "3.33" , "shipping" : "2.22" , "tax" : "1.11" } } , "description" : "Crunchify Tutorial: How to Invoke PayPal REST API using Java Client?" } ] , "redirect_urls" : { "return_url" : "http://localhost:3000/crunchifyReturn" , "cancel_url" : "http://localhost:3000/crunchifyCancel" } } 13 : 22 : 28.818 [ main ] DEBUG com . paypal . base . HttpConnection - curl command : curl -- verbose -- request POST 'https://api.sandbox.paypal.com/v1/payments/payment' \ -- header "Authorization:Bearer A21AAGyWgsdafxUM_1FCE5d9adsfuwfiOB7_4XkX3wKHWXe3nkKgt2bhadflirJsMWP9JAm-pBT2DtUJ5W0A" \ -- header "User-Agent:PayPalSDK/ (v=11; vendor=Oracle Corporation; bit=64; os=Mac_OS_X 10.14.1)" \ -- header "PayPal-Request-Id:74886e72-34e4-4a70-8cd7-605cd63b5dc9" \ -- header "Accept:application/json" \ -- header "Content-Type:application/json" \ -- data '{ "intent": "sale", "payer": { "payment_method": "paypal" }, "transactions": [ { "amount": { "currency": "USD", "total": "6.66", "details": { "subtotal": "3.33", "shipping": "2.22", "tax": "1.11" } }, "description": "Crunchify Tutorial: How to Invoke PayPal REST API using Java Client?" } ], "redirect_urls": { "return_url": "http://localhost:3000/crunchifyReturn", "cancel_url": "http://localhost:3000/crunchifyCancel" } }' 13 : 22 : 33.407 [ main ] DEBUG com . paypal . base . rest . PayPalResource - response : { "id" : "PAY-25A74012S3552184CLP6EP6A" , "intent" : "sale" , "state" : "created" , "payer" : { "payment_method" : "paypal" } , "transactions" : [ { "amount" : { "total" : "6.66" , "currency" : "USD" , "details" : { "subtotal" : "3.33" , "tax" : "1.11" , "shipping" : "2.22" } } , "description" : "Crunchify Tutorial: How to Invoke PayPal REST API using Java Client?" , "related_resources" : [ ] } ] , "create_time" : "2018-11-26T19:22:32Z" , "links" : [ { "href" : "https://api.sandbox.paypal.com/v1/payments/payment/PAY-25A74012S3552184CLP6EP6A" , "rel" : "self" , "method" : "GET" } , { "href" : "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-9C691969F1033220V" , "rel" : "approval_url" , "method" : "REDIRECT" } , { "href" : "https://api.sandbox.paypal.com/v1/payments/payment/PAY-25A74012S3552184CLP6EP6A/execute" , "rel" : "execute" , "method" : "POST" } ] } createdPayment Obejct Details == > { "id" : "PAY-25A74012S3552184CLP6EP6A" , "intent" : "sale" , "payer" : { "payment_method" : "paypal" } , "transactions" : [ { "related_resources" : [ ] , "amount" : { "currency" : "USD" , "total" : "6.66" , "details" : { "subtotal" : "3.33" , "shipping" : "2.22" , "tax" : "1.11" } } , "description" : "How to Invoke PayPal REST API using Java Client?" } ] , "state" : "created" , "create_time" : "2018-11-26T19:22:32Z" , "links" : [ { "href" : "https://api.sandbox.paypal.com/v1/payments/payment/PAY-25A74012S3552184CLP6EP6A" , "rel" : "self" , "method" : "GET" } , { "href" : "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd\u003d_express-checkout\u0026token\u003dEC-9C691969F1033220V" , "rel" : "approval_url" , "method" : "REDIRECT" } , { "href" : "https://api.sandbox.paypal.com/v1/payments/payment/PAY-25A74012S3552184CLP6EP6A/execute" , "rel" : "execute" , "method" : "POST" } ] } 13 : 22 : 33.414 [ main ] DEBUG com . paypal . base . rest . PayPalResource - request header : { Authorization = Bearer A21AAGyWgkMoxUM_1FCE5d948J5SAxIuwfiOB7_4XkX3wKHWXe3nkKgt2bhtXISnazHlE9yzlirJsMWP9JAm - pBT2DtUJ5W0A , User - Agent = PayPalSDK / ( v = 11 ; vendor = Oracle Corporation ; bit = 64 ; os = Mac_OS_X 10.14.1 ) , PayPal - Request - Id = e47412c8 - 2c1f - 4505 - b1a3 - 7b4723eb99f4 , Accept = application / json , Content - Type = application / json } 13 : 22 : 33.415 [ main ] DEBUG com . paypal . base . rest . PayPalResource - request body : { "payer_id" : "1Z232AMNN" } 13 : 22 : 33.415 [ main ] DEBUG com . paypal . base . HttpConnection - curl command : curl -- verbose -- request POST 'https://api.sandbox.paypal.com/v1/payments/payment/PAY-25A74012S3552184CLP6EP6A/execute' \ -- header "Authorization:Bearer A21AAGyWgsdafxUM_1FCE5d9adsfuwfiOB7_4XkX3wKHWXe3nkKgt2bhadflirJsMWP9JAm-pBT2DtUJ5W0A" \ -- header "User-Agent:PayPalSDK/ (v=11; vendor=Oracle Corporation; bit=64; os=Mac_OS_X 10.14.1)" \ -- header "PayPal-Request-Id:eadf412c8-2c1f-4505-b1a3-7basdaf99f4" \ -- header "Accept:application/json" \ -- header "Content-Type:application/json" \ -- data '{ "payer_id": "1Z232AMNN" }' 13 : 22 : 34.016 [ main ] ERROR com . paypal . base . HttpConnection - Response code : 400 Error response : { "name" : "PAYMENT_NOT_APPROVED_FOR_EXECUTION" , "message" : "Payer has not approved payment" , "information_link" : "https://developer.paypal.com/docs/api/payments/#errors" , "debug_id" : "113d5208bf8d3" } name : PAYMENT_NOT_APPROVED_FOR_EXECUTION message : Payer has not approved payment details : null debug - id : 113d5208bf8d3 information - link : https : //developer.paypal.com/docs/api/payments/#errors |
次のいくつかのチュートリアルと同じように、 how to capture money
をrefund money
し、支払人のアカウントに設定したvoid any authorization
にする方法について詳しく説明します。
