幾行代碼即可對接paypal支付!全能對接第三方支付Java工具包!!

2021-02-13 代碼雜談

最近由於公司業務的調整,需要對接國外paypal支付,paypal的接口文檔全是英文,看起來很不舒服和流暢,主要還是怪自己的英文太菜,後來去github找了一個大佬寫的支付集成的sdk包,非常的厲害,幾行代碼即可對接成功,啪的一下,很快啊,一下子就對接好了。

paypal有v1、v2兩個版本,但是那位大佬寫的sdk是對接的paypal v1版本,我已經提了issues讓作者趕緊把v2給寫出來了,希望各位也多去提issues讓作者趕緊把v2版本的給搞出來,咱們大家一起push他!

接下來,我簡單的介紹一下使用的集成支付sdk,pay-java-parent是一個集成了第三方支付的sdk,包括微信支付、支付寶支付、銀聯、paypal等等,使用起來非常的簡潔高效,基本都是幾行代碼即可對接成功,本文講解的是如何對接paypal支付,github倉庫地址:

https://github.com/egzosn/pay-java-parent

如果你有需要對接其他的支付api,我在這十分的推薦使用這個sdk,也希望讀者們也能去貢獻一份自己的代碼,把這個sdk更好的去完善它!

由於pay-java-parent的作者只集成了paypal的v1版本,所以,本文只介紹如何對接paypal的v1版本,也希望讀者們能去倉庫地址多提issues讓作者把v2版本儘快更新出來。

首先,要對接paypal支付就得開通paypal的企業帳號,如何開通的本文就不做介紹,本人只介紹如何用沙箱帳號成功的對接paypal的支付。

現在還未創建沙箱環境中的帳號,所以,我們先去把帳號創建好,再來編寫代碼。創建環境的過程中記得把梯子給掛上,不然會404。https://developer.paypal.com/developer/applications/

在瀏覽器輸入上方連結,選擇左邊的SANDBOX下的Accounts。進入後,會看到paypal已經為我們自動生成了幾個帳號,但是我們不用paypal創建的測試帳號,因為用著會很卡,所以我們自己再創建兩個,一個的類型是Business(商家),一個是Personal(用戶),國家那一項一定要選中國,帳戶餘額都可以自己隨便填。

生成測試帳號後,我們登陸沙箱環境的paypal網站,這裡一定要注意,沙箱環境的連結和paypal的官網是不同的!一定是要下方的連結!!

沙盒帳號登陸網址:https://sandbox.paypal.com

如果用的是商家類型的測試帳號登陸該網站,就可以看到收款的記錄等,如果使用的是用戶類型的測試帳號登陸該網站,就可以看到自己的付款記錄等。

下面一步就是創建應用了,創建應用登陸下面網址,選擇左邊導航欄下的Dashboard再選擇My Apps & Credentials,即可看到創建應用的頁面,默認的情況下paypal會為我們創建兩個默認應用,但我們還是自己創建一個,請記住,創建應用使用原本的企業帳號登陸,而不是沙盒的商家帳號!

創建應用網址:https://developer.paypal.com/developer/applications/

創建成功後,把生成的clientId和secret複製好,接下來就是咱們編碼的時候了!

首先,添加pay-java-parent的maven依賴:

<!--集成paypal支付-->
<dependency>      
  <groupId>com.egzosn</groupId>
  <artifactId>pay-java-paypal</artifactId>
  <version>2.13.3</version>
</dependency>

然後,我們再編寫paypal的配置類:

package com.test.paypal.config;

import com.egzosn.pay.common.api.PayService;
import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.paypal.api.PayPalConfigStorage;
import com.egzosn.pay.paypal.api.PayPalPayService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class PayPalConfig {

 @Value("${paypal.isTest}")
 private Boolean isTest;

 @Value("${paypal.client.id}")
 private String clientId;

 @Value("${paypal.client.secret}")
 private String clientSecret;

 @Value("${paypal.success-url}")
 private String successUrl;

 @Value("${paypal.cancel-url}")
 private String cancelUrl;

 @Bean
 public PayService getPayPalService(){
  PayService payService=new PayPalPayService(getPayPalConfigStorage());
  payService.setRequestTemplateConfigStorage(getHttpConfigStorage());
  return payService;
 }

 @Bean
 public PayPalConfigStorage getPayPalConfigStorage(){
  PayPalConfigStorage configStorage=new PayPalConfigStorage();
  configStorage.setClientID(clientId);
  configStorage.setClientSecret(clientSecret);
  configStorage.setTest(isTest);
  configStorage.setReturnUrl(successUrl);
  configStorage.setNotifyUrl(cancelUrl);
  return configStorage;
 }

 @Bean
 public HttpConfigStorage getHttpConfigStorage(){
  HttpConfigStorage httpConfigStorage=new HttpConfigStorage();
  httpConfigStorage.setMaxTotal(300);
  httpConfigStorage.setDefaultMaxPerRoute(30);
  return httpConfigStorage;
 }
}

可以看到,我把所有的配置都寫在了yml文件上,然後通過讀取yml進行配置,這樣可以比較方便進行更換咱們的配置信息。

接下來就是controller層的配置了:

com.test.paypal.controller;

import com.egzosn.pay.common.api.PayService;
import com.egzosn.pay.common.bean.DefaultCurType;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.PayOrder;
import com.egzosn.pay.paypal.bean.PayPalTransactionType;
import com.test.paypal.util.StringUnits;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/paypal")
@Slf4j
@RestController
public class PaypalController {

 @Autowired
 private PayService service;

 @RequestMapping("/pay")
 public String pay() {
  log.info("調用付款接口");
  PayOrder payOrder = new PayOrder("付款的subject", "訂單內容", new BigDecimal(4),
   StringUnits.getUUID(),
   PayPalTransactionType.sale);
  payOrder.setCurType(DefaultCurType.USD);
  Map orderInfo = service.orderInfo(payOrder);
  String result=service.buildRequest(orderInfo, MethodType.POST);
  log.info("result:{}",result);
  return result;
 }

 @RequestMapping("/cancel")
 public Object cancel(){
  return "你取消了付款";
 }

 @RequestMapping("/success")
 public Object success(HttpServletRequest request) throws IOException {
  Map<String,Object> params=service.getParameter2Map(request.getParameterMap(),request.getInputStream());
  if(service.verify(params)){
   log.info("恭喜你付款成功");
   //做邏輯處理
   return "恭喜你付款成功";
  }
  return "付款失敗";
 }
}

我再把yml文件的配置給貼一下吧:

paypal:
  isTest: true  #是否開啟沙盒環境測試
  success-url: http://localhost:8080/paypal/success #成功後返回的url(使用的是異步通知地址的兼容做法)
  cancel-url: http://localhost:8080/paypal/cancel #取消付款的回調url
  client:
    id: 你的clientId
    secret: 你的secret

該注釋的參數也都注釋了,希望朋友們能夠測試成功!

如果對底層代碼比較感興趣的,建議各位朋友去看看該sdk的源碼,多學習一下源碼的設計思想,我稍微看了下,源碼寫的非常整潔,觀看感非常的不錯!

---END-

往期熱門文章:

☞【設計模式】飛機太大Egan拉不動

☞【設計模式-原型】Egan好不容易來的加薪機會

關注我哦

小編不易,如果你喜歡這篇文章,點點【在看】,點點分享,感謝

相關焦點

  • 對接【支付寶】支付接口
    ,但是由於申請了新的帳號以前舊的的接口對接就不能使用了所以就開始對接新的版本接口對接,在這裡也記錄一下讓那些還沒有對接的兄弟少走點彎路。閱讀接口文檔https://docs.open.alipay.com/270/alipay.trade.page.pay/下載SDKhttps://docs.open.alipay.com/54/103419選擇java版本將sdk集成進入項目中sdk中有一個jar包將這個jar包上傳到私服上去。
  • Shopyy支付如何配置PayPal與信用卡?
    ——本文收錄自Derek的博客:www.zcart.cn平臺客戶比如亞馬遜等會採用Payoneer派安盈、Pingpong、連連、萬裡匯WorldFirst等作為收款的工具。但是以上公司並不是每一家都可以支持外卡收單!外卡收單和平臺收款是兩個部門!
  • 支付系統調用第三方支付接口的總結
    最近服務端的項目中常用到調用微信、支付寶的等第三方支付接口,這裡對創建訂單流程做些總結,主要是app端支付。
  • 【財經】易寶:守望第三方支付
    唐彬,國內首批第三方支付平臺——易寶支付執行長及聯合創始人。時間蛻化成氣質,與四年前相比,他變得更加沉穩、堅定。  支付寶、財付通兩大巨頭迅猛吞食了八成以上的市場份額,監管收緊導致行業發展遭遇「寒冬」,眾多中小第三方支付公司為求生存炒作牌照的聲音甚囂塵上,當浮躁、焦慮、功利等心態充斥整個第三方支付行業的時候,唐彬與他的易寶支付依然在堅守,因為他相信,「中國經濟的希望在網際網路,而中國金融的希望則在支付。」
  • 第三方支付,你真的了解嗎?
    根據央行2010年在《非金融機構支付服務管理辦法》中給出的非金融機構支付服務的定義,從廣義上講,第三方支付是指非金融機構作為收、付款人的支付中介所提供的網絡支付、預付卡、銀行卡收單以及中國人民銀行確定的其他支付服務。第三方支付已不僅僅局限於最初的網際網路支付,而是成為線上線下全面覆蓋,應用場景更為豐富的綜合支付工具。
  • 第三方支付平臺須加強對第四方支付平臺監管
    處在這一網絡黑灰產業鏈上遊的,正是涉嫌洗錢的非法第四方支付平臺。這些平臺與境外非法博彩網站或詐騙組織對接,利用「四件套」註冊網絡虛擬支付帳號,在資金幾經流轉後實現洗錢目的,然後不法分子再從中抽取佣金。對此,中國政法大學金融法研究中心主任劉少軍認為,外部社會環境為第四方支付機構的發展提供了生長土壤,主要包括行動支付的興起和金融創新的發展。
  • Paypal支付用途有哪些?
    通過paypal支付,可以在網上購物、酒店入住等場景下,通過郵件和密碼安全支付。2、網上收款。Paypal提供完整的商業解決方案,企業可以通過網站、APP或者網上帳單等形式,利用paypal進行安全收款,並提現。3、網上paypal帳戶轉帳。通過paypal可以實時給其他paypal帳戶轉帳。
  • 淺析Shopify獨立站痛點之一:支付方式
    而獨立站會有所不同,支付方式會更加靈活,可以是獨立站平臺直接集成的支付方式,也可以是通過API進行對接的三方支付。常見的獨立站在線支付方式一般分為兩種:1、PayPal支付2、第三方支付方式大部分的建站工具都會集成PayPal支付,以及部分第三方支付方式
  • 支付 | 個人接入支付寶當面付實現web和h5支付(超詳細步驟)
    Java對接支付寶當面付    6.1 官方文檔    6.2 引入相關依賴    6.3 當面付-預下單    6.4 支付寶官方支付回調(掃碼支付)7. 結束語1. 前言很多人或者很多業務都有接入支付寶支付或者微信支付的需要,但接入第三方支付(alipay、wxpay)一直都需要公司資質或者個體戶等,使得個人開發者只能望而卻步。
  • 海淘必備支付工具PayPal帳戶註冊2018詳細圖文教程!
    PayPal 是更快速、安全的跨國第三方支付平臺。透過PayPal,買家與賣家可以更簡單、安全地進行跨國線上購物或網路銷售。買家通常無需支付手續費,但在進行跨境交易時,可能需要支付幣種兌換費用。 從世界各地的數百萬家網店購物。 符合條件的交易享受PayPal買家保障,購物安全放心。
  • 蘋果推Apple Pay支付服務 衝擊第三方支付標準
    蘋果公司通過視頻展示了最新的支付服務,在整個支付過程中,利用近場通訊(即NFC)的技術和蘋果的TouchID技術,用戶可以輕鬆完成支付。  據悉,ApplePay的出現,將對銀行、第三方支付企業,甚至整個支付生態環境都可能產生深遠影響。本報記者就「ApplePay對銀行、第三方支付企業的影響」採訪了中國建設銀行產品創新與管理部副總經理趙志宏博士。
  • 抖音支付來了,第三方支付一次大洗牌或來臨?
    因為此前字節跳動也已獲得小貸牌照、保險經紀牌照、證券投顧三張金融牌照,所以這一支付渠道不僅僅只限於抖音直播電商,未來的貸款、保險、證券業務可能都會與之對接。目前,字節跳動已在抖音App、今日頭條App等平臺上提供了「放心借」等線上貸款入口,之後今日頭條也陸續上線了小額短期借款服務「備用金」產品,以及自營貸款產品「Dou分期」。
  • 企業涉及第三方支付平臺的核查要求及第三方支付平臺交易相關的會計處理參考
    之所以選擇支付寶,是因為它是目前我國交易規模最大的、最具代表性的獨立第三方支付平臺,並且其交易流程是人們最熟悉的。  一、第三方支付平臺的運營模式  第三方支付平臺是獨立於消費者和商家的營運商,也是交易資金代收代付的中介。它與各大銀行籤約,建立深入的戰略合作關係,並與銀行支付結算系統對接,為電子交易中的買賣雙方提供資金支付的中轉站。
  • Paypal支付流程大解密!!!
    paypal的支付流程是怎麼樣的?  如果PayPal付款人慾支付一筆金額給商家或者收款人時,可以分為以下幾個步驟:  1.只要有一個電子郵件地址,付款人就可以登錄開設PayPal帳戶,通過驗證成為其用戶,並提供信用卡或者相關銀行資料,增加帳戶金額,將一定數額的款項從其開戶時登記的帳戶(例如信用卡)轉移至PayPal帳戶下。
  • 央行新法規實施 著急的應是第三方支付公司!
    因此,身份驗證渠道是使用第三方支付的關鍵。 Ⅰ類帳戶,用戶只能進行消費、轉帳,並且額度自帳戶開立起只有累積1000元。Ⅰ類帳戶只需一個外部渠道驗證身份即可。這也是「如果不實名,支付寶微信紅包就不能轉帳發紅包」的原因。Ⅱ類帳戶,帳戶餘額每年有10萬元的額度進行消費和轉帳。Ⅲ類帳戶,帳戶餘額每年有20萬元的額度,除了消費和轉帳,還可以進行投資理財。
  • Django對接支付寶電腦網站、App支付步驟詳解!這個框架是真強!
    一、前言本文主要針對 Python for Django 在對接支付寶電腦網站、手機網站、App支付過程中具體實現步驟進行詳解;
  • 微信支付寶個人碼受限,需要規範使用的行動支付(附第三方支付概念)
    第三方支付相關企業:新大陸:全資子公司國通星驛公司是擁有全國性銀行卡收單業務牌照的第三方支付機構,具有豐富的支付及增值服務經驗。國通星驛的主營業務是向商戶提供掃碼支付、銀行卡支付、NFC支付等綜合支付服務。
  • Android開發 : 使用EasyPay打造全能行動支付框架
    EasyPay和微信支付等行動支付SDK的區別EasyPay 是一個開源的聚合支付可定製化框架,目前已集成微信APP支付,支付寶APP支付SDK。銀聯支付(開發中)。Android開發者只需要簡單調用EasyPay的幾行代碼,即可調起支付客戶端,完成支付流程,得到支付結果。
  • Java中的微信支付(1):API V3版本籤名詳解
    目前微信支付第三方籤發的權威的 CA 證書(API 證書)中提供的私鑰來進行籤名。通過商戶平臺你可以設置並獲取 API 證書。解析 API 證書接下來就是證書的解析了,證書的解析有網上很多方法,這裡我使用比較「正規」的方法來解析,利用 JDK 安全包的java.security.KeyStore來解析。
  • 第三方支付行業研究報告(合集)
    ,下期(電池行業研報)2019年Q1中國第三方支付季度數據發布_搜搜報告.pdf2020中國第三方支付企業服務市場數位化發展專題分析.pdf2020中國第三方支付市場數位化發展專題分析.pdf2020年中國第三方支付行業研究報告.pdfTenbagger專題研究系列(1):深度剖析美國第三方支付公司