phonepe-by-sandeep/phonepe-pg-php-sdk

该包的最新版本(dev-main)没有提供许可证信息。

此SDK帮助商家将PhonePe支付网关集成到其PHP应用程序中。

dev-main 2024-07-15 13:08 UTC

This package is not auto-updated.

Last update: 2024-09-24 12:24:21 UTC


README

这是一个用于简化商家集成过程的PHP库/SDK。使用此客户端需要PHP 7.0或更高版本。有关直接访问API的参考,您可以访问开发者文档

安装

需求

  1. PHP 7.0或更高版本
  2. 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函数

  1. 从PhonePe获得的回调响应的headers中的x_verify属性。
  2. 从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":{}} ';