phonepe-by-sandeep / phonepe-pg-php-sdk
此SDK帮助商家将PhonePe支付网关集成到其PHP应用程序中。
Requires
- ext-curl: *
- ext-json: *
- ext-openssl: *
- json-mapper/json-mapper: ^2.19
Requires (Dev)
- mockery/mockery: ^1.6
- pestphp/pest: ^2.11
- phpunit/phpunit: ^10.2
This package is not auto-updated.
Last update: 2024-09-24 12:24:21 UTC
README
这是一个用于简化商家集成过程的PHP库/SDK。使用此客户端需要PHP 7.0或更高版本。有关直接访问API的参考,您可以访问开发者文档。
安装
需求
- PHP 7.0或更高版本
- Composer 2.6.2或更高版本
必选步骤
转到您项目的根目录,其中包含您的composer.json和以下存储库详细信息。
"repositories": [ { "type": "package", "package": [ { "dist": { "type": "zip", "url": "https://phonepe.mycloudrepo.io/public/repositories/phonepe-pg-php-sdk/phonepe-pg-php-sdk.zip" }, "name": "phonepe/phonepe-pg-php-sdk", "version": "1.0.0", "autoload": { "classmap": ["/"] } } ] } ],
转到您项目的根目录,其中包含您的composer.json文件,并执行以下命令。
composer require --no-cache --prefer-source phonepe/phonepe-pg-php-sdk
请注意,您将需要要求vendor/autoloader.php来自动加载所有必需的类。
入门
要获取您的密钥,请访问PhonePe PG的商家入门: 商家入门
开始之前您需要以下三项
$merchantId = "<merchantId>"; $saltKey = "<saltKey>"; $saltIndex = "<saltIndex>";
快速开始
类初始化
要创建PhonePePaymentClient
类的实例,您需要提供以下参数
示例用法
const MERCHANTID = "<sample-mid>"; const SALTKEY = "<sample-salt-key>"; const SALTINDEX = "<sample-salt-index>"; const SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT,SHOULDPUBLISHEVENTS);
通过支付页面启动交易
要启动支付,我们需要使用PgPayRequestBuilder
类构建请求。要使用支付页面工具启动交易,我们使用来自InstrumentBuilder
类的静态方法buildPayPageInstrument
,并将其传递给PgPayRequestBuilder
。您可以使用pay
函数启动交易。
$merchantTransactionId = "<TestMerchantTransactionId>"; $request = PgPayRequestBuilder::builder() ->mobileNumber("xxxxxxxxx") ->callbackUrl("https://webhook.in/test/status") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument(InstrumentBuilder::buildPayPageInstrument()) ->build(); $response = $phonePePaymentsClient->pay($request); $PagPageUrl = $response->getInstrumentResponse()->getRedirectInfo()->getUrl()
使用UPI Intent启动交易
要启动支付,我们需要使用PgPayRequestBuilder
类构建请求。要使用支付页面工具启动交易,我们使用来自InstrumentBuilder
类的静态方法getUpiIntentInstrumentBuilder
,并将其传递给PgPayRequestBuilder
。您可以使用pay
函数启动交易。
$merchantTransactionId = "<MerchantTransactionId>"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->deviceContext(Constants::ANDROID) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getUpiIntentInstrumentBuilder() ->targetApp("com.phonepe.com") ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $intentUrl = $response->getInstrumentResponse()->getIntentUrl();
您将获得一个意图URL。它应该用于完成交易。
检查回调的有效性
现在让我们验证来自PhonePe的回调在商家端点上的有效性,该回调作为支付时传递的callbackUrl。您需要将两样东西传递给verifyCallback函数
- 从PhonePe获得的回调响应的headers中的
x_verify
属性。 - 从PhonePe获得的响应体。
$xVerify = "a005532637c6a6e4a4b08ebc6f1144384353305a9cd253d995067964427cd0bb###1"; $response = '{ "response":"eyJzdWNjZXNzIjpmYWxzZSwiY29kZSI6IlBBWU1FTlRfRVJST1IiLCJtZXNzYWdlIjoiUGF5bWVudCBGYWlsZWQiLCJkYXRhIjp7Im1lcmNoYW50SWQiOiJtZXJjaGFudElkIiwibWVyY2hhbnRUcmFuc2FjdGlvbklkIjoibWVyY2hhbnRUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25JZCI6IkZUWDIzMDYwMTE1NDMxOTU3MTYzMjM5IiwiYW1vdW50IjoxMDAsInN0YXRlIjoiRkFJTEVEIiwicmVzcG9uc2VDb2RlIjoiUkVRVUVTVF9ERUNMSU5FX0JZX1JFUVVFU1RFRSIsInBheW1lbnRJbnN0cnVtZW50IjpudWxsfX0=" }'; $isValid = $phonepeClient->verifyCallback($response, $xVerify);
如果回调签名已验证,则$isValid变量的值将为true。
检查交易的状况
让我们看看通过UPi完成支付后的交易详情。
$checkStatus = $phonePePaymentsClient->statusCheck("<merchantTransactionId>");
处理失败的交易
如果您想检查失败交易的状况。
$merchantTransactionId="<merchantTransactionId>"; $checkStatus = $phonePePaymentsClient->statusCheck("<merchantTransactionId>"); $checkStatus->getResponseCode(); $checkStatus->getState(); $checkStatus->getTransactionId();
交易退款
您可以使用refund
函数对PhonePe交易进行退款。要启动退款,我们需要使用PgRefundRequestBuilder
类构建请求。
$pgRefundRequest = PgRefundRequestBuilder::builder() ->originalTransactionId("<originalMerchantTransactionId>") ->merchantId(MERCHANTID) ->merchantTransactionId("<merchantTransactionId>") ->callbackUrl("https://webhook.in/test/status") ->amount(<amountInPaise>) ->build(); $response = $phonePePaymentsClient->refund($pgRefundRequest);
文档
类初始化
要创建与PG交互的PhonePePaymentClient
类实例,您需要提供以下参数。
$phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS);
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS);
支付
此方法用于通过PhonePe PG启动支付。支持的各个工具请参阅支付工具。
参数
使用 UPI 意图工具发起支付请求的示例。
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $merchantTransactionId = "<MerchantTransactionId>"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getUpiIntentInstrumentBuilder() ->targetApp("com.phonepe.com") ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $intentUrl = $response->getInstrumentResponse()->getIntentUrl();
返回值
PgPayResponse 类
支付工具
让我们看看 PhonePe PG 提供的各种工具。
以下工具受到支持
支付页面支付工具
使用支付页面作为支付工具构建 PgPayRequest。
工具参数
来自 InstrumentBuilder
类的 buildPayPageInstrument
方法。此函数直接返回工具对象,无需调用其上的 build() 方法。
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $merchantTransactionId = 'PHPSDK' . date("ymdHis") . "payPageTest"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9325326080") ->callbackUrl("https://webhook.in/test/status") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument(InstrumentBuilder::buildPayPageInstrument()) ->build(); $response = $phonePePaymentsClient->pay($request); $url=$response->getInstrumentResponse()->getRedirectInfo()->getUrl();
UPI 收集工具
使用 UPI 收集作为支付工具构建 PgPayRequest。
工具参数
在用 vpa 发起 UPI 收集交易之前,您需要使用 validateVpa
函数验证 vpa。
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); // validating vpa before initiating payment. $vpa = "12345678@ybl"; $pgValidateVpaResponse = $phonePePaymentsClient->validateVpa($vpa); echo json_encode($pgValidateVpaResponse); //If validateVpa function does not throws PhonePeException with Invalid Vpa message go ahead with following request $merchantTransactionId = ""<merchantTransactionId>""; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test ") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getUpiCollectInstrumentBuilder() ->vpa($vpa) ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request);
UPI 意图工具
使用 UPI 意图作为支付工具构建 PgPayRequest。
工具参数
IOS UPI 意图的示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->deviceContext(Constants::IOS) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getUpiIntentInstrumentBuilder() ->targetApp("PHONEPE") ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $intentUrl = $response->getInstrumentResponse()->getIntentUrl();
Android 的示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $merchantTransactionId = 'PHPSDK' . date("ymdHis") . "upiIntentPayTest"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->deviceContext(Constants::ANDROID)) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getUpiIntentInstrumentBuilder() ->targetApp("com.phonepe.com") ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $intentUrl = $response->getInstrumentResponse()->getIntentUrl();
注意
对于意图工具,您必须在请求中传递 deviceContext
(ANDROID 或 IOS)以获取特定于应用的意图 URL。
UPI 二维码工具
使用 UPI 二维码作为支付工具构建 PgPayRequest。
工具参数
来自 InstrumentBuilder
类的 buildUpiQrInstrument
方法。该函数直接返回工具对象,无需调用其上的 build() 方法。
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $merchantTransactionId = "merchantTransactinoId"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test ") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument(InstrumentBuilder::buildUpiQrInstrument()) ->build(); $response = $phonePePaymentsClient->pay($request); $imageBase64Data = $response->getInstrumentResponse()->getQrData(); $intentUrl = $response->getInstrumentResponse()->getIntentUrl();
卡片支付工具
使用卡片作为支付工具构建 PgPayRequest。
工具参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $authMode = "3DS"; $saveCard = true; $encryptionKeyId = 20; $encryptedCvv = $phonePePaymentsClient->encryptedData(PRODPUBLICKEY, "123"); $encryptedCardNumber = $phonePePaymentsClient->encryptedData(PRODPUBLICKEY, "5272559973463145"); $expiryMonth = "10"; $expiryYear = "2025"; $cardHolderName = "TEST USER"; $merchantTransactionId = "merchantTransactionId"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getNewCardInstrumentBuilder() ->authMode($authMode) ->saveCard($saveCard) ->encryptedCvv($encryptedCvv) ->encryptedCardNumber($encryptedCardNumber) ->expiryMonth($expiryMonth) ->expiryYear($expiryYear) ->encryptionKeyId($encryptionKeyId) ->cardHolderName($cardHolderName) ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $url = $response->getInstrumentResponse()->getRedirectInfo()->getUrl();
令牌支付工具
使用令牌作为支付工具构建 PgPayRequest。
工具参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $tokenCvv = "elsmatmiYs+ZzXwdO2/BXf96DoZQ2uGkkHfN34331edarer6LFhUN9GpkYYHH8ebPD4q8Fst4v4GAXAcwqzesvstaTkpfouOosWvXUR6wQDXV6yy8gwf88fR+GGMyUXjmnEjiXqVSNhhJcd1HVobJLInvFWl1Y1zeuo8T7IFEAxC0Mu5CfrFD3uNgNiIJwp0BRc67bCFQyiOtXK+MmeijVBa5PeP2/CZdHW+8sn2wLrm5R6MRS7HIfs8S2vytUVUW74VVPZRRVMVgMs3sPQyR/YbaEeRby1Ec01r/trW2H+2smusuyelTzQTCwLbRG153ZjbtUyl3TrRfbgEhfZwDxcBa9EbIKDQkTRnh4ooKLK7HaUb8t7K70hpzV/cJ7b5AML/RMjG4DCyomegGRP/NbrXFZbrk8QEacO4ruvNVLOQG9RqAdIBm9neMPUrfc4Uoahy253Gx/VWtqN1kilwmAKZvu6KAX7JNGyPz32QseY8HDHRyPM5HHGZSkVm7XZ+hahEIHedEKWbbdM2fV0kbvzzbArBkTlA7B9m3022sILwwrnc0hMuy4xbRClB/BoT0EE08hEutGz0nzurGm8vdQag43FdnKykcmCS4xW+jC1XUi5ok4lZHdUwMSF1oGabriiJjXFf+vz4ESgJDBXzzKzJhaGB5pIoPydwQ15Ziv2m9OY="; $encryptedToken = "RwC47xWWNvdlwCSNBRN14jl0tW5gla/MomKp43435sr3334dmYUYmLHQRBXoratDTOi7lKlYNyLUXD6n6Q0txGNE7bL7Vc49yUAkmENmB9RiVGxcAaPJGDi37628xOXRIOtbCpq4s2Cy2ti2Gx9G7sKvU98+eN2XVs39f9jSexsa7c/FIUeedaZ0cbdzWVvj/kq6y9Fsx9lyHs/VnYaxfJtWI2LWt/VmPsx/0z1WYx9wK6jFpSX9de/tNL+hyCn6F0ygjyc1nGU/UuQT9jt+dmxns1SGNGrfMOlk/jMsQMGztWDgrPzpmJR6sjr1apjmwBAbYU+5dl6Hcc/QIjjSKSzBxYeXANAtx2/LcUl8Wtscg8Dk64TRsMs1GuJm8FYfxz974jXvh2DnRhOufieCAe5mc6ZjP61WjPMQBBjesY7lSZ1TKeLNcoAbHCL+yc3IFdYohEz3bRGLf+9UMsFOe3K8NQP7kx68dIKacnf++nU/EJ+fphzfSMaHfYksayB+fdVsM0VeRXNAGRjxuo9cqWhgX5cJ7IILGycheBtEhgZli3Ji8tj6d39FHVZXq3NeKbPnyTyUU3LPUG2zuQqyxTwCNIP4LaYwf2bk8DcAIuOCK9GUxdYP3PsNPxQfuWYIHerYvAIbkPk37uzn2RndgOiMem3TP5Unnhd+f8Qo+5Qbfaw="; $cryptogram = "69696181054119923371"; $expiryYear = "2026"; $expiryMonth = "01"; $panSuffix = "8209"; $encryptionKeyid = 20; $authMode = "3DS"; $merchantTransactionId = "merchantTransactionId"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getTokenInstrumentBuilder() ->authMode($authMode) ->encryptedCvv($tokenCvv) ->encryptedToken($encryptedToken) ->cryptogram($cryptogram) ->expiryYear($expiryYear) ->expiryMonth($expiryMonth) ->panSuffix($panSuffix) ->encryptionKeyId($encryptionKeyid) ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $url = $response->getInstrumentResponse()->getRedirectInfo()->getUrl();
网上银行支付工具
使用网上银行作为支付工具构建 PgPayRequest。
工具参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); // To get the bankList Id's and other payment options $includeNetBankingBanksList = true; $paymentOptionsResponse = $phonePePaymentsClient->paymentOptions($includeNetBankingBanksList); $merchantTransactionId = "<merchantTRansactionId>"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test ") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getNetbankingInstrumentBuilder() ->bankId("HDFC") ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $url = $response->getInstrumentResponse()->getRedirectInfo()->getUrl();
已保存的卡片工具
使用已保存的卡片作为支付工具构建 PgPayRequest。
参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $authMode = "3DS"; $encryptedCvv = $phonePePaymentsClient->encryptedData(PRODPUBLICKEY, "123"); $encryptionKeyId = 3; $cardId = "cardId"; $merchantTransactionId = "merchantTransactionId"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9090909090") ->callbackUrl("https://webhook.in/test") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument( InstrumentBuilder::getSavedCardInstrumentBuilder() ->authMode($authMode) ->encryptedCvv($encryptedCvv) ->encryptionKeyId($encryptionKeyId) ->cardId($cardId) ->build() ) ->build(); $response = $phonePePaymentsClient->pay($request); $url = $response->getInstrumentResponse()->getRedirectInfo()->getUrl();
检查状态
此方法用于检查交易的状态。
参数
使用 UPI 完成交易的示例状态检查
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $checkStatus = $phonePePaymentsClient->statusCheck("merchantTransactionId"); $state=$checkStatus->getState();
返回值
该函数返回一个具有以下属性的 PgCheckStatusResponse
对象
使用 checkStatus
函数查看通过 UPI 完成支付后的交易详情。
$phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $checkStatus = $phonePePaymentsClient->statusCheck("merchantTransactionId"); $paymentInstrument = $checkStatus->getPaymentInstrument(); $utr = $paymentInstrument->getUtr();
使用 checkStatus
函数查看通过卡片完成支付后的交易详情。
$phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $checkStatus = $phonePePaymentsClient->statusCheck("merchantTransactionId"); $paymentInstrument = $checkStatus->getPaymentInstrument(); $pgTransactionId = $paymentInstrument->getPgTransactionId(); $pgAuthorizationCode = $paymentInstrument->getPgAuthorizationCode(); $bankId = $paymentInstrument->.getBankId(); $bankId = $paymentInstrument->.getArn();
使用 checkStatus
函数查看通过网上银行完成支付后的交易详情。
$phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $checkStatus = $phonePePaymentsClient->statusCheck("merchantTransactionId"); $paymentInstrument = $checkStatus->getPaymentInstrument(); $bankId = $paymentInstrument->getBankId(); $bankTransactionId = $paymentInstrument->getBankTransactionId();
退款
请求参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $pgRefundRequest = PgRefundRequestBuilder::builder() ->originalTransactionId("<originalTransactionId>") ->merchantId(MERCHANTID) ->merchantTransactionId("<merchantTransactionId>") ->callbackUrl("https://webhook.in/test/status") ->amount(<amountInPaise>) ->build(); $response = $phonePePaymentsClient->refund($pgRefundRequest); $responseCode = $response->getResponseCode();
返回值
PgRefundResponse
PgRefundResponse 属性
验证 VPA
用于检查给定的 vpa 是否有效。
参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); String vpa="abc@ybl"; try { $validateVpaResponse = $phonePePaymentsClient->validateVpa("abc@ybl"); $name = $validateVpaResponse->getName(); } catch (Excpetion $e) { // Handle PhonePeException thrown in case of invalid vpa. }
返回值
如果 vpa 有效,该函数将返回具有以下属性的 PgValidateVpaResponse
对象
PgValidateVpaResponse 属性
支付选项
此方法用于检索可用的支付选项。
参数
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); $paymentOptionsResponse = $phonePePaymentsClient->paymentOptions(true);
返回值
该函数返回一个具有以下属性的 PgPaymentsOptionsResponse
对象
PgPaymentsOptionsResponse 属性
回调验证
您需要传递给 verifyResponse 函数两项内容
参数
返回值
true
如果对于给定数据,x_verify
是有效的。
示例用法
$xVerify = "a005532637c6a6e4a4b08ebc6f1144384353305a9cd253d995067964427cd0bb###1"; $response = '{ "response":"eyJzdWNjZXNzIjpmYWxzZSwiY29kZSI6IlBBWU1FTlRfRVJST1IiLCJtZXNzYWdlIjoiUGF5bWVudCBGYWlsZWQiLCJkYXRhIjp7Im1lcmNoYW50SWQiOiJtZXJjaGFudElkIiwibWVyY2hhbnRUcmFuc2FjdGlvbklkIjoibWVyY2hhbnRUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25JZCI6IkZUWDIzMDYwMTE1NDMxOTU3MTYzMjM5IiwiYW1vdW50IjoxMDAsInN0YXRlIjoiRkFJTEVEIiwicmVzcG9uc2VDb2RlIjoiUkVRVUVTVF9ERUNMSU5FX0JZX1JFUVVFU1RFRSIsInBheW1lbnRJbnN0cnVtZW50IjpudWxsfX0=" }'; $isValid = $phonepeClient->verifyCallback($response, $xVerify ); echo $isValid;
如果回调签名已验证,则这将导致值变为 true。
1
加密数据
您需要传递给 encryptdata
函数两项内容,并使用共享的公钥返回加密数据
参数
返回值
示例用法
const PLUBLICKEY = "<publickey>" $data= "105"; $encryptedData = $phonePePaymentsClient->encryptedData(PRODPUBLICKEY, $data);
异常处理
来自 PhonePe SDK 的异常。
属性
示例用法
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); // If a already used transactionId is used to initiated new transaction $merchantTransactionId = "<merchantTransactionId>"; $request = PgPayRequestBuilder::builder() ->mobileNumber("9089785645") ->callbackUrl("https://webhook.in/test/status") ->merchantId(MERCHANTID) ->merchantUserId("<merchantUserId>") ->amount(<amountInPaise>) ->merchantTransactionId($merchantTransactionId) ->paymentInstrument(InstrumentBuilder::buildPayPageInstrument()) ->build(); try{ $response = $phonePePaymentsClient->pay($request); } catch(PhonePePgException $phonePeException){ $phonePeCode = $phonePeException->getPhonePeResponse()->getCode(); $phonePeMessage = $phonePeException->getPhonePeResponse()->getMessage(); }
可能抛出的异常
PhonePeException:此异常在向 PhonePe 服务器发出请求后抛出。
如果传递了重复的交易 ID
// PhonePeException $code = 417; $message = '417 Received HTTP response: {"success":false,"code":"INVALID_TRANSACTION_ID","message":"The transaction id you have entered seems to be invalid.","data":{}}';
如果传递了错误的 saltKey 到 PhonePeTransactionClient
// PhonePeException $code = 401; $message = "401: Unauthorised Please check you saltKey, SaltIndex and merchantId <response>";
如果传递了错误的 merchantId 到 PhonePeTransactionClient
// PhonePeException $code = 404; $message = "404 https://api.phonepe.com/apis/hermes/pg/v1/pay Not found <response>";
如果从 PhonePe 服务器收到 500 响应
// PhonePeException $code = 500; $message = "500: Internal server error: Please retry after some Time <response>";
验证 VPA 示例用法和异常
const $MERCHANTID="<merchantId>"; const $SALTKEY="<saltKey>"; const $SALTINDEX="<saltIndex>"; const $env=Env::UAT; const $SHOULDPUBLISHEVENTS=true; $phonePePaymentsClient = new PhonePePaymentClient(MERCHANTID, SALTKEY, SALTINDEX, Env::UAT, SHOLDPUBLISHEVENTS); try{ $vpa = "12345678@ybl"; $pgValidateVpaResponse = $phonePePaymentsClient->validateVpa($vpa); echo json_encode($pgValidateVpaResponse); } catch(PhonePePgException $phonePeException){ $phonePeCode = $phonePeException->getPhonePeResponse()->getCode(); $phonePeMessage = $phonePeException->getPhonePeResponse()->getMessage(); }
如果从 PhonePe 服务器收到 417 响应
// PhonePeException $code = 500; $message = '417 Received HTTP response: {"success":false,"code":"INVALID_VPA","message":"Incorrect UPI details. Please check the UPI ID entered.","data":{}} ';