sparkplug/momoapi-php

MTN momo绑定到PHP

dev-master 2020-08-24 14:16 UTC

This package is not auto-updated.

Last update: 2024-09-19 16:55:45 UTC


README

用我们的MTN MoMo API为您的应用程序供电

加入我们活跃、积极的社区
网站 | Spectrum

Build Status Latest Stable Version Total Downloads License Coverage Status Join the community on Spectrum

安装

您需要安装PHP 5.4.0或更高版本。

Composer

您可以通过Composer安装绑定。运行以下命令

composer require sparkplug/momoapi-php

要使用绑定,请使用Composer的自动加载

require_once('vendor/autoload.php');

手动安装

如果您不希望使用Composer,您可以下载最新版本。然后,为了使用绑定,请包含init.php文件。

require_once('/path/to/momoapi-php/init.php');

依赖项

绑定需要以下扩展才能正常工作

  • curl,尽管如果您愿意,可以使用您自己的非cURL客户端
  • json
  • mbstring(多字节字符串)

如果您使用Composer,这些依赖项应该会自动处理。如果您手动安装,您需要确保这些扩展可用。

沙箱环境

创建沙箱环境API用户

接下来,我们需要获取用户ID用户密钥,为此我们需要使用我们订阅的产品的主键,以及指定一个主机。该库附带的命令行应用程序可以帮助创建沙箱凭据。它假设您已在https://momodeveloper.mtn.com上创建账户,并拥有您的Ocp-Apim-Subscription-Key

## within the project, on the command line. In this example, our domain is akabbo.ug
$ php vendor/sparkplug/momoapi-php/lib/Provision.php
$ providerCallBackHost: https://akabbo.ug
$ Ocp-Apim-Subscription-Key: f83xx8d8xx6749f19a26e2265aeadbcdeg

providerCallBackHost是您的回调主机,而Ocp-Apim-Subscription-Key是您订阅的具体产品的API密钥。API密钥对于产品是唯一的,并且您将需要为每个使用的产品获取一个API密钥。您应该得到类似以下响应

Here is your User Id and API secret : {'apiKey': 'b0431db58a9b41faa8f5860230xxxxxx', 'UserId': '053c6dea-dd68-xxxx-xxxx-c830dac9f401'}

这些是我们将在沙箱环境中使用的凭据。在生产环境中,这些凭据将在满足KYC要求后在MTN OVA管理仪表板上为您提供。

配置

在我们可以完全利用库之前,我们需要指定全局配置。使用请求选项构建器进行全局配置。默认情况下,这些是从环境变量中选取的,但可以使用MomoApi构建器进行覆盖

  • BASE_URL:一个可选的MTN Momo API基本URL。默认情况下,将使用预发布基本URL
  • ENVIRONMENT:可选的环境,可以是“sandbox”或“production”。默认是'sandbox'
  • CURRENCY:默认货币为EUR
  • CALLBACK_HOST:您的webhooks URL所在域名。这是必需的。
  • COLLECTION_PRIMARY_KEY:收集API主键
  • COLLECTION_USER_ID:收集用户ID
  • COLLECTION_API_SECRET:收集API密钥
  • REMITTANCE_USER_ID:汇款用户ID
  • REMITTANCE_API_SECRET:汇款API密钥
  • REMITTANCE_PRIMARY_KEY:汇款订阅密钥
  • DISBURSEMENT_USER_ID:支付用户ID
  • DISBURSEMENT_API_SECRET:支付API密钥
  • DISBURSEMENT_PRIMARY_KEY:支付主键

一旦您已指定全局变量,现在可以提供产品特定的变量。每个MoMo API产品都需要其自己的身份验证详细信息,即其自己的订阅密钥用户ID用户密钥,有时也称为API密钥。因此,我们必须为将使用的每个产品配置订阅密钥。

您只需配置将使用的产品的变量。

您还可以使用MomoApi全局设置不同的变量。

MomoApi::setBaseUrl('base');

MomoApi::setTargetEnvironment("targetenv");

MomoApi::setCurrency("UGX");

MomoApi::setCollectionApiSecret("collection_api_secret");

MomoApi::setCollectionPrimaryKey("collection_primary_key");

MomoApi::setCollectionUserId("collection_user_id");

MomoApi::setRemittanceApiSecret("remittance_api_secret");

MomoApi::setRemittancePrimaryKey("remittance_primary_key");

MomoApi::setRemittanceUserId("remittance_user_id" );

MomoApi::setDisbursementApiSecret("disbursement_api_secret");

MomoApi::setDisbursementPrimaryKey("disbursement_primary_key");

MomoApi::setDisbursementUserId("disbursement_user_id");

集合

可以通过以下参数创建集合客户端。请注意,生产环境中的COLLECTION_USER_IDCOLLECTION_API_SECRET在MTN OVA仪表板上提供;

  • COLLECTION_PRIMARY_KEY:开发者门户上集合产品的主键。
  • COLLECTION_USER_ID:对于沙盒环境,使用mtnmomo命令生成的。
  • COLLECTION_API_SECRET:对于沙盒环境,使用mtnmomo命令生成的。

您可以使用以下方式创建集合客户端

$client = Collection();

方法

  1. requestToPay:此操作用于向消费者(付款人)请求付款。付款人将被要求授权付款。一旦付款人授权付款,交易就会执行。交易状态将保持在待授权状态,直到付款人授权或拒绝付款,或者系统超时。可以使用getTransactionStatus验证交易状态。

  2. getTransaction:使用requestToPay返回的transactionId检索交易信息。您可以在交易失败或成功之前以一定时间间隔调用它。如果交易失败,它将抛出一个适当的错误。

  3. getBalance:获取账户余额。

  4. isPayerActive:检查账户持有人是否已在系统中注册并处于活动状态。

示例代码

        $coll = new Collection($currency = "c..", $baseUrl = "url..", $targetEnvironment = "u...", $collectionApiSecret = "u...", $collectionPrimaryKey = "u...", $collectionUserId = "u..."]);

        $params = ['mobile' => "256782181656", 'payee_note' => "34", 'payer_message' => "12", 'external_id' => "ref", 'currency' => "EUR", 'amount' => "500"];

        $t = $coll->requestToPay($params);

        $transaction = $coll->getTransaction($t);

支付分配

可以使用以下参数创建支付分配客户端。请注意,生产环境中的DISBURSEMENT_USER_IDDISBURSEMENT_API_SECRET在MTN OVA仪表板上提供;

  • DISBURSEMENT_PRIMARY_KEY:开发者门户上支付分配产品的主键。
  • DISBURSEMENT_USER_ID:对于沙盒环境,使用mtnmomo命令生成的。
  • DISBURSEMENT_API_SECRET:对于沙盒环境,使用mtnmomo命令生成的。

您可以使用以下方式创建支付分配客户端

        $disbursement = new Disbursement();

        $params = ['mobile' => "256782181656", 'payee_note' => "34", 'payer_message' => "12", 'external_id' => "ref", 'currency' => "EUR", 'amount' => "500"];

        $t = $disbursement->requestToPay($params);


        $transaction = $disbursement->getTransaction($t);

方法

  1. transfer:用于将金额从账户所有者的账户转移到收款人账户。可以使用getTransactionStatus方法验证交易状态。

  2. getTransactionStatus:使用transfer返回的transactionId检索交易信息。您可以在交易失败或成功之前以一定时间间隔调用它。

  3. getBalance:获取您的账户余额。

  4. isPayerActive:此方法用于检查账户持有人是否已在系统中注册并处于活动状态。

示例代码


自定义请求超时

注意:我们不推荐降低非只读调用的超时时间,因为即使您本地超时,请求仍然可以完成。

要修改请求超时(连接或总时间,以秒为单位),您需要告诉API客户端使用除默认以外的CurlClient。您将在该CurlClient中设置超时。

// set up your tweaked Curl client
$curl = new \MomoApi\HttpClient\CurlClient();
$curl->setTimeout(10); // default is \MomoApi\HttpClient\CurlClient::DEFAULT_TIMEOUT
$curl->setConnectTimeout(5); // default is \MomoApi\HttpClient\CurlClient::DEFAULT_CONNECT_TIMEOUT

echo $curl->getTimeout(); // 10
echo $curl->getConnectTimeout(); // 5

// tell MomoApi to use the tweaked client
\MomoApi\ApiRequest::setHttpClient($curl);

// use the Momo API client as you normally would

自定义cURL选项(例如代理)

需要为请求设置代理?将必需的CURLOPT_*数组传递给CurlClient构造函数,使用与curl_stopt_array()相同的语法。这将设置SDK对每个HTTP请求的默认cURL选项,尽管许多更常见的选项(例如超时;见上文如何设置这些)即使在此处设置也会被客户端覆盖。

// set up your tweaked Curl client
$curl = new \MomoApi\HttpClient\CurlClient([CURLOPT_PROXY => 'proxy.local:80']);
// tell MomoApi to use the tweaked client
\MomoApi\ApiRequest::setHttpClient($curl);

还可以将一个可调用的函数传递给CurlClient构造函数,该函数根据请求输入返回上述数组。请参阅tests/CurlClientTest.php中的testDefaultOptions()以了解此行为的示例。请注意,在发送请求之前,在每次API请求开始时都会调用该可调用函数。

配置Logger

该库只进行基本的日志记录,但它可以使用兼容PSR-3的logger进行配置,以便消息最终会出现在那里,而不是error_log

\MomoApi\MomoApi::setLogger($logger);

配置自动重试

该库可以被配置为自动重试由于间歇性网络问题而失败的请求

\MomoApi\MomoApi::setMaxNetworkRetries(2);

开发

获取Composer。例如,在Mac OS上

brew install composer

安装依赖项

composer install

按照上述说明安装依赖项(这将解决PHPUnit),然后您可以运行测试套件

./vendor/bin/phpunit

或运行单个测试文件

./vendor/bin/phpunit tests/UtilTest.php