sparkplug / momoapi-php
MTN momo绑定到PHP
Requires
- php: >=5.4.0
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- adhocore/cli: ^0.3.3
Requires (Dev)
- php-coveralls/php-coveralls: 1.1.*
- phpunit/phpunit: ~4.0
- squizlabs/php_codesniffer: ~2.0
- symfony/process: ~2.8
This package is not auto-updated.
Last update: 2024-09-19 16:55:45 UTC
README
用我们的MTN MoMo API为您的应用程序供电
加入我们活跃、积极的社区网站 | 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');
依赖项
绑定需要以下扩展才能正常工作
如果您使用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。默认情况下,将使用预发布基本URLENVIRONMENT
:可选的环境,可以是“sandbox”或“production”。默认是'sandbox'CURRENCY
:默认货币为EURCALLBACK_HOST
:您的webhooks URL所在域名。这是必需的。COLLECTION_PRIMARY_KEY
:收集API主键COLLECTION_USER_ID
:收集用户IDCOLLECTION_API_SECRET
:收集API密钥REMITTANCE_USER_ID
:汇款用户IDREMITTANCE_API_SECRET
:汇款API密钥REMITTANCE_PRIMARY_KEY
:汇款订阅密钥DISBURSEMENT_USER_ID
:支付用户IDDISBURSEMENT_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_ID
和COLLECTION_API_SECRET
在MTN OVA仪表板上提供;
COLLECTION_PRIMARY_KEY
:开发者门户上集合
产品的主键。COLLECTION_USER_ID
:对于沙盒环境,使用mtnmomo
命令生成的。COLLECTION_API_SECRET
:对于沙盒环境,使用mtnmomo
命令生成的。
您可以使用以下方式创建集合客户端
$client = Collection();
方法
-
requestToPay
:此操作用于向消费者(付款人)请求付款。付款人将被要求授权付款。一旦付款人授权付款,交易就会执行。交易状态将保持在待授权状态,直到付款人授权或拒绝付款,或者系统超时。可以使用getTransactionStatus
验证交易状态。 -
getTransaction
:使用requestToPay
返回的transactionId
检索交易信息。您可以在交易失败或成功之前以一定时间间隔调用它。如果交易失败,它将抛出一个适当的错误。 -
getBalance
:获取账户余额。 -
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_ID
和DISBURSEMENT_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);
方法
-
transfer
:用于将金额从账户所有者的账户转移到收款人账户。可以使用getTransactionStatus
方法验证交易状态。 -
getTransactionStatus
:使用transfer
返回的transactionId
检索交易信息。您可以在交易失败或成功之前以一定时间间隔调用它。 -
getBalance
:获取您的账户余额。 -
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