intro
easypurchase is arm to provide a startkit for developing payment serverside api/callback handler.
it is based on laravel, omnipay etc. those opensource projects make this happen, thx to all.
i use chinese mainly, and focus on alipay and wechatpay, so my docs will be in chinese language.
easypurchase计划打造一套开源的标准化的聚合支付程序,为开发者快速搭建对接支付提供助力。主要围绕国内最常用的支付宝和微信支付,然后逐步覆盖海内外各种常用APP、H5、web、内购、小程序等支付方式。
技术方案
- 优先选择MIT协议的开源程序,避免在商用中遇到协议问题
- 选择Laravel LTS版本提供稳定的基础API平台,一方面支付程序的性能不是关键,一方面Laravel的性能优化我很擅长,有需要付费支持做Laravel性能优化的可以联系我
- 选择omnipay 3作为聚合支付网关的基础,因为已经它支持了很多的支付渠道
- 选择guzzleHTTP作为http客户端,文档很详细,所以用起来很方便
- 选择pingpp-php作为客户端SDK,是的,作为支付网关,既可以直接由客户端调用请求,也可以作为支付中心微服务,由业务方接收客户端数据后透传,实现业务与支付彻底解耦,如果有业务多元发展到一定阶段不知道如何做架构拆分的公司可以联系我
- 货币暂时只支持人民币CNY,金额统一以分为单位存储unsigned int类型,程序层面考虑网络支付额度限制最大支付金额为10万元,但理论上最大可以支持4千万元。
主要挑战
开源的底层技术类库只用考虑当前支付方式的参数有没有传够,而如何利用开源技术真正实现一套可插拔的企业级生产可用的支付系统是很难的。
- 文档要足够清晰
- 接口要通用化但又要简化不必要的传参
- 安全问题很重要,越灵活的系统以及开源系统最容易被黑客利用公开的漏洞攻克,比黑盒的容易的多
- 语言问题,虽然我是坚定的phper,但中国现状是有一定规模的互联网公司盲目的信奉java技术体系,语言选型是一大难,这也是我做这套系统的初衷,因为过去缺乏这种成熟系统,导致开发不得不转为java开发的系统的事情经常发生
支持支付库
主要支持
| Gateway | 2.x | 3.x | Composer Package | Maintainer |
|---|---|---|---|---|
| Alipay | ✓ | ✓ | lokielse/omnipay-alipay | Loki Else |
| Braintree | ✓ | ✓ | omnipay/braintree | Omnipay |
| UnionPay | ✓ | ✓ | lokielse/omnipay-unionpay | Loki Else |
| WechatPay | ✓ | ✓ | lokielse/omnipay-wechatpay | Loki Else |
计划支持
| Gateway | 2.x | 3.x | Composer Package | Maintainer |
|---|---|---|---|---|
| 99Bill | - | ✓ | x-class/omnipay-99bill | Laraveler |
| Alipay(Global) | ✓ | ✓ | lokielse/omnipay-global-alipay | Loki Else |
| PaymentWall | ✓ | - | incube8/omnipay-paymentwall | Del |
| QQ Wallet(QPay) | - | ✓ | kuangjy/omnipay-qpay | Kuang Jiaye |
| Square | ✓ | ✓ | transportersio/omnipay-square | Transporters.io |
| Starkpay | ✓ | ✓ | starkpay/omnipay | Starkpay |
| Stripe | ✓ | ✓ | omnipay/stripe | Del |
| Ping++ | ✓ | - | phoenixg/omnipay-pingpp | Huang Feng |
omnipay 3.x 库 看情况做适配
Gateway | 2.x | 3.x | Composer Package | Maintainer — | — | — | — | — Authorize.Net | ✓ | ✓ | omnipay/authorizenet | Jason Judge CashBaBa | ✓ | ✓ | omnipay/cashbaba | Recursion Technologies Ltd Dummy | ✓ | ✓ | omnipay/dummy | Del eWAY | ✓ | ✓ | omnipay/eway | Del Mollie | ✓ | ✓ | omnipay/mollie | Barry vd. Heuvel PaymentExpress (DPS) | ✓ | ✓ | omnipay/paymentexpress | Del PayPal | ✓ | ✓ | omnipay/paypal | Del Sage Pay | ✓ | ✓ | omnipay/sagepay | Jason Judge SecurePay | ✓ | ✓ | omnipay/securepay | Omnipay Worldpay Business Gateway | ✓ | ✓ | omnipay/worldpay | Omnipay
兼容
| Gateway | 2.x | 3.x | Composer Package | Maintainer |
|---|---|---|---|---|
| 2c2p | ✓ | ✓ | dilab/omnipay-2c2p | Xu Ding |
| Adyen | - | ✓ | academe/omnipay-adyen | Jason Judge |
| Affirm | ✓ | ✓ | eduardlleshi/omnipay-affirm | Eduard Lleshi |
| Arca | - | ✓ | k3rnel/omnipay-arca | Poghos Boyajyan |
| Authorize.Net API | - | ✓ | academe/omnipay-authorizenetapi | Jason Judge |
| Authorize.Net Recurring Billing | - | ✓ | cimpleo/omnipay-authorizenetrecurring | CimpleO |
| Bankart | ✓ | ✓ | ampeco/omnipay-bankart | Ampeco |
| BlueOrange bank | - | ✓ | deh4eg/omnipay-blueorange | Denis Smolakov |
| BitPay | ✓ | ✓ | hiqdev/omnipay-bitpay | HiQDev |
| CoinPayments | ✓ | ✓ | InkedCurtis/omnipay-coinpayments | InkedCurtis |
| Cybersource | ✓ | ✓ | dioscouri/omnipay-cybersource | Dioscouri Design |
| Datatrans | ✓ | ✓ | academe/omnipay-datatrans | Jason Judge |
| Docdata Payments | ✓ | ✓ | uskur/omnipay-docdata-payments | Uskur |
| Ebanx | - | ✓ | descubraomundo/omnipay-ebanx | Descubra o Mundo |
| eGHL | - | ✓ | e-ghl/omnipay | Jawad Humayun |
| eGHL | ✓ | ✓ | dilab/omnipay-eghl | Xu Ding |
| eCoin | ✓ | ✓ | hiqdev/omnipay-ecoin | HiQDev |
| eSewa | - | ✓ | sudiptpa/omnipay-esewa | Sujip Thapa |
| Elavon | ✓ | ✓ | lxrco/omnipay-elavon | Korri |
| ePayments | ✓ | ✓ | hiqdev/omnipay-epayments | HiQDev |
| ePayService | ✓ | ✓ | hiqdev/omnipay-epayservice | HiQDev |
| Faspay | ✓ | ✓ | David-Kurniawan/omnipay-faspay | David |
| FreeKassa | ✓ | ✓ | hiqdev/omnipay-freekassa | HiQDev |
| Fibank | - | ✓ | ampeco/omnipay-fibank | Ampeco |
| GVP (Garanti) | - | ✓ | emr/omnipay-gvp | Emre Akinci |
| Icepay Payments | - | ✓ | superbrave/omnipay-icepay-payments | SuperBrave |
| iDram | - | ✓ | ptuchik/omnipay-idram | Avik Aghajanyan |
| iDeal | - | ✓ | deniztezcan/omnipay-ideal | Deniz Tezcan |
| Ingenico ePayments | - | ✓ | deniztezcan/omnipay-ingenico-epayments | Deniz Tezcan |
| iPay88 | ✓ | ✓ | dilab/omnipay-ipay88 | Xu Ding |
| Ikajo | ✓ | ✓ | hiqdev/omnipay-ikajo | HiQDev |
| InterKassa | ✓ | ✓ | hiqdev/omnipay-interkassa | HiQDev |
| InovioPay | ✓ | ✓ | mvestil/omnipay-inoviopay | Mark Vestil |
| Klarna Checkout | ✓ | ✓ | myonlinestore/omnipay-klarna-checkout | MyOnlineStore |
| Luminor Gateway | - | ✓ | deh4eg/omnipay-luminor | Denis Smolakov |
| Midtrans | ✓ | ✓ | dilab/omnipay-midtrans | Xu Ding |
| MercadoPago | - | ✓ | lucassmacedo/omnipay-mercadopago | Lucas Macedo |
| Magnius | - | ✓ | fruitcake/omnipay-magnius | Fruitcake |
| MTNCAM Mobile Money | ✓ | ✓ | larrytech7/omnipay-momocm | Akah Harvey |
| MoMo | - | ✓ | phpviet/omnipay-momo | PHPViet |
| Moneris | - | ✓ | unoapp-dev/omnipay-moneris | UNOapp Dev |
| GiroCheckout | ✓ | ✓ | academe/omnipay-girocheckout | Jason Judge |
| MyFatoorah | - | ✓ | myfatoorah/omnipay | MyFatoorah Plugins Team |
| National Australia Bank (NAB) Transact | ✓ | ✓ | sudiptpa/omnipay-nabtransact | Sujip Thapa |
| NestPay (EST) | - | ✓ | uskur/omnipay-nestpay | Uskur |
| Nocks | ✓ | ✓ | nocksapp/omnipay-nocks | Nocks |
| Nuvei | - | ✓ | nmc9/omnipay-nuvei | DiversifiedTech |
| OkPay | ✓ | ✓ | hiqdev/omnipay-okpay | HiQDev |
| OnePay | ✓ | ✓ | dilab/omnipay-onepay | Xu Ding |
| Openpay Australia | ✓ | ✓ | sudiptpa/omnipay-openpay | Sujip Thapa |
| Oppwa | ✓ | ✓ | vdbelt/omnipay-oppwa | Martin van de Belt |
| PAY. (Pay.nl & Pay.be) | ✓ | ✓ | paynl/omnipay-paynl | Andy Pieters |
| PayMongo | - | ✓ | oozman/omnipay-paymongo | Oozman |
| Payoo | ✓ | ✓ | dilab/omnipay-payoo | Xu Ding |
| PaymentgateRu | ✓ | ✓ | pinguinjkeke/omnipay-paymentgateru | Alexander Avakov |
| Paynow | - | ✓ | pay-now/omnipay-paynow | Paynow |
| PAYONE | ✓ | ✓ | academe/omnipay-payone | Jason Judge |
| Paysafecard | - | ✓ | worldstream-labs/omnipay-paysafecard | Worldstream |
| Paysafe Payment Hub (Neteller) | - | ✓ | worldstream-labs/omnipay-paysafe-payment-hub | Worldstream |
| Paysera | - | ✓ | semyonchetvertnyh/omnipay-paysera | Semyon Chetvertnyh |
| Paxum | ✓ | ✓ | hiqdev/omnipay-paxum | HiQDev |
| Pelecard | ✓ | ✓ | uskur/omnipay-pelecard | Uskur |
| Qiwi | ✓ | ✓ | hiqdev/omnipay-qiwi | HiQDev |
| RoboKassa | ✓ | ✓ | hiqdev/omnipay-robokassa | HiQDev |
| RocketGate | ✓ | ✓ | mvestil/omnipay-rocketgate | Mark Vestil |
| Sberbank | - | ✓ | andrewnovikof/omnipay-sberbank | Andrew Novikov |
| Sisow | ✓ | ✓ | fruitcakestudio/omnipay-sisow | Fruitcake |
| ToyyibPay | - | ✓ | sitehandy/omnipay-toyyibpay | Amirol Zolkifli |
| VR Payment | - | ✓ | antibodies-online/omnipay-vr-payment | antibodies-online |
| WebMoney | ✓ | ✓ | dercoder/omnipay-webmoney | Alexander Fedra |
| Wirecard | ✓ | ✓ | igaponov/omnipay-wirecard | Igor Gaponov |
| Worldpay XML Hosted Corporate Gateway | ✓ | ✓ | catharsisjelly/omnipay-worldpay-cg-hosted | Chris Lock |
| Yandex.Kassa | ✓ | ✓ | hiqdev/omnipay-yandex-kassa | HiQDev |
| Yandex.Money for P2P payments | ✓ | ✓ | hiqdev/omnipay-yandexmoney | HiQDev |
| Yekpay | - | ✓ | nekofar/omnipay-yekpay | Milad Nekofar |
| ZarinPal | - | ✓ | nekofar/omnipay-zarinpal | Milad Nekofar |
无法支持
| Gateway | 2.x | 3.x | Composer Package | Maintainer |
|---|---|---|---|---|
| 2Checkout | ✓ | - | omnipay/2checkout | Omnipay |
| 2Checkout Improved | ✓ | - | collizo4sky/omnipay-2checkout | Agbonghama Collins |
| Acapture (PayVision) | ✓ | - | qup/omnipay-acapture | Niels de Vries |
| Agms | ✓ | - | agmscode/omnipay-agms | Maanas Royy |
| Allied Wallet | ✓ | - | delatbabel/omnipay-alliedwallet | Del |
| Barclays ePDQ | ✓ | - | digitickets/omnipay-barclays-epdq | DigiTickets |
| Beanstream | ✓ | - | lemonstand/omnipay-beanstream | LemonStand |
| BKM Express | ✓ | - | yasinkuyu/omnipay-bkm | Yasin Kuyu |
| BlueSnap | ✓ | - | vimeo/omnipay-bluesnap | Vimeo |
| Buckaroo | ✓ | - | omnipay/buckaroo | Omnipay |
| CardGate | ✓ | - | cardgate/omnipay-cardgate | CardGate |
| CardSave | ✓ | - | omnipay/cardsave | Omnipay |
| Checkout.com | ✓ | - | fotografde/checkoutcom | fotograf.de |
| CloudBanking | ✓ | - | cloudbanking/omnipay-cloudbanking | Cloudbanking |
| Coinbase | ✓ | - | omnipay/coinbase | Omnipay |
| CoinGate | ✓ | - | coingate/omnipay-coingate | CoinGate |
| Creditcall | ✓ | - | meebio/omnipay-creditcall | John Jablonski |
| CSOB (GP WebPay) | ✓ | - | bileto/omnipay-csob | |
| Cybersource SOAP | ✓ | - | dabsquared/omnipay-cybersource-soap | DABSquared |
| DataCash | ✓ | - | digitickets/omnipay-datacash | DigiTickets |
| Datatrans | ✓ | - | w-vision/datatrans | Dominik Pfaffenbauer |
| ecoPayz | ✓ | - | dercoder/omnipay-ecopayz | Alexander Fedra |
| EgopayRu | ✓ | - | pinguinjkeke/omnipay-egopaymentru | Alexander Avakov |
| Fasapay | ✓ | - | andreas22/omnipay-fasapay | Andreas Christodoulou |
| Fat Zebra | ✓ | - | delatbabel/omnipay-fatzebra | Del |
| First Data | ✓ | - | omnipay/firstdata | OmniPay |
| Flo2cash | ✓ | - | guisea/omnipay-flo2cash | Aaron Guise |
| Free / Zero Amount | ✓ | - | colinodell/omnipay-zero | Colin O’Dell |
| Globalcloudpay | ✓ | - | dercoder/omnipay-globalcloudpay | Alexander Fedra |
| GoCardless | ✓ | - | omnipay/gocardless | Del |
| GoPay | ✓ | - | bileto/omnipay-gopay | |
| GovPayNet | ✓ | - | omnipay/omnipay-govpaynet | FlexCoders |
| GVP (Garanti) | ✓ | - | yasinkuyu/omnipay-gvp | Yasin Kuyu |
| Helcim | ✓ | - | academe/omnipay-helcim | Jason Judge |
| IfthenPay | ✓ | - | ifthenpay/omnipay-ifthenpay | Rafael Almeida |
| Iyzico | ✓ | - | yasinkuyu/omnipay-iyzico | Yasin Kuyu |
| Judo Pay | ✓ | - | transportersio/omnipay-judopay | Transporters.io |
| Laybuy | ✓ | - | mediabeastnz/omnipay-laybuy | Myles Derham |
| Komerci (Rede, former RedeCard) | ✓ | - | byjg/omnipay-komerci | João Gilberto Magalhães |
| Komoju | ✓ | - | vink/omnipay-komoju | Danny Vink |
| Manual | ✓ | - | omnipay/manual | Del |
| Migs | ✓ | - | omnipay/migs | Omnipay |
| Mpesa | ✓ | - | wasksofts/omnipay-mpesa | wasksofts |
| MOLPay | ✓ | - | leesiongchan/molpay | Lee Siong Chan |
| MultiCards | ✓ | - | incube8/omnipay-multicards | Del |
| MultiSafepay | ✓ | - | omnipay/multisafepay | Alexander Deruwe |
| MyCard | ✓ | - | xxtime/omnipay-mycard | Joe Chu |
| NestPay (EST) | ✓ | - | yasinkuyu/omnipay-nestpay | Yasin Kuyu |
| Netaxept (BBS) | ✓ | - | omnipay/netaxept | Omnipay |
| Netbanx | ✓ | - | omnipay/netbanx | Maks Rafalko |
| Neteller | ✓ | - | dercoder/omnipay-neteller | Alexander Fedra |
| NetPay | ✓ | - | netpay/omnipay-netpay | NetPay |
| Network Merchants Inc. (NMI) | ✓ | - | mfauveau/omnipay-nmi | Matthieu Fauveau |
| Pacnet | ✓ | - | mfauveau/omnipay-pacnet | Matthieu Fauveau |
| Pagar.me | ✓ | - | descubraomundo/omnipay-pagarme | Descubra o Mundo |
| Paratika (Asseco) | ✓ | - | yasinkuyu/omnipay-paratika | Yasin Kuyu |
| PayFast | ✓ | - | omnipay/payfast | Omnipay |
| Payflow | ✓ | - | omnipay/payflow | Del |
| PaymentExpress / DPS (A2A) | ✓ | - | onlinesid/omnipay-paymentexpress-a2a | Sid |
| PaymentSense | ✓ | - | digitickets/omnipay-paymentsense | DigiTickets |
| PayPro | ✓ | - | paypronl/omnipay-paypro | Fruitcake |
| Paysafecard | ✓ | - | dercoder/omnipay-paysafecard | Alexander Fedra |
| Paysera | ✓ | - | povils/omnipay-paysera | Povils |
| PaySimple | ✓ | - | dranes/omnipay-paysimple | Dranes |
| PaySsion | ✓ | - | inkedcurtis/omnipay-payssion | Curtis |
| PayTrace | ✓ | - | softcommerce/omnipay-paytrace | Oleg Ilyushyn |
| PayU | ✓ | - | bileto/omnipay-payu | |
| PayZen | ✓ | - | ubitransports/omnipay-payzen | Ubitransport |
| Pin Payments | ✓ | - | omnipay/pin | Del |
| POLi | ✓ | - | burnbright/omnipay-poli | Sid |
| Portmanat | ✓ | - | dercoder/omnipay-portmanat | Alexander Fedra |
| Posnet | ✓ | - | yasinkuyu/omnipay-posnet | Yasin Kuyu |
| Postfinance | ✓ | - | bummzack/omnipay-postfinance | Roman Schmid |
| Quickpay | ✓ | - | nobrainerweb/omnipay-quickpay | Nobrainer Web |
| Rabobank | ✓ | - | omnipay/rabobank | Barry vd. Heuvel |
| Razorpay | ✓ | - | razorpay/omnipay-razorpay | razorpay |
| Realex | ✓ | - | digitickets/omnipay-realex | DigiTickets |
| RedSys | ✓ | - | nazka/sermepa-omnipay | Javier Sampedro |
| RentMoola | ✓ | - | rentmoola/omnipay-rentmoola | Geoff Shaw |
| SecPay | ✓ | - | justinbusschau/omnipay-secpay | Justin Busschau |
| Secure Trading | ✓ | - | meebio/omnipay-secure-trading | John Jablonski |
| Skrill | ✓ | - | alfaproject/omnipay-skrill | João Dias |
| Sofort | ✓ | - | aimeoscom/omnipay-sofort | Aimeos GmbH |
| Spreedly | ✓ | - | gregoriohc/omnipay-spreedly | Gregorio Hernández Caso |
| TargetPay | ✓ | - | omnipay/targetpay | Alexander Deruwe |
| TatraBank | ✓ | - | omnipay-tatrabank | |
| Tpay | ✓ | - | omnipay/tpay | Tpay.com |
| Vantiv | ✓ | - | lemonstand/omnipay-vantiv | LemonStand |
| Veritrans | ✓ | - | andylibrian/omnipay-veritrans | Andy Librian |
| Vindicia | ✓ | - | vimeo/omnipay-vindicia | Vimeo |
| VivaPayments | ✓ | - | delatbabel/omnipay-vivapayments | Del |
| ✓ | - | labs7in0/omnipay-wechat | 7IN0’s Labs | |
| WePay | ✓ | - | collizo4sky/omnipay-wepay | Agbonghama Collins |
| Wirecard | ✓ | - | academe/omnipay-wirecard | Jason Judge |
| Worldpay XML Direct Corporate Gateway | ✓ | - | teaandcode/omnipay-worldpay-xml | Dave Nash |
| Yandex.Money | ✓ | - | yandexmoney/omnipay | Roman Ananyev |