PHP 示例
此 PHP 示例基于 Laravel 框架,使用 Http 库请求
签名类实现
php
class Signature
{
public static function sign($params, $apiToken)
{
$str = $apiToken;
ksort($params);
foreach ($params as $key => $value) {
// 空参数不参与签名
if (!is_empty($value) && $key !== "sign") $str .= "&$key=$value";
}
return md5($str);
}
}请求下单
以下是代收下单请求,代付请求相似
php
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
$params = [
"mch_id" => 2050, // 商户ID,从商户后台获取
"trans_id" => "E1763923463", // 交易ID,你的系统订单ID,方便两边核对,
"channel" => "bank", // 代收通道,联系商务获取,
"amount" => "200000.00", // 订单金额
"currency" => "VND", // 币种
"callback_url" => "https://api.blackhole.com", // 回调地址
"remarks" => "callme", // 下单备注,回调时原样返回
"nonce" => Str::random(8), // 随机串
"timestamp" => time(), // UNIX 时间戳
];
$apiToken = "0xFAKE_TOKENx0"; // API Token,从商户后台获取
$params["sign"] = Signature::sign($params, $apiToken);
$gateway = "http://接口域名/api/v1/mch/pmt-orders";
$res = Http::timeout(5)->post($gateway, $data);
if ($res->sttus() != 200) {
// todo: 调用失败处理
} else {
$json = $res->json();
if ($json["code"] != 200) {
$reason = $json["message"]; // 失败原因
// todo: 调用失败处理
} else {
// todo: 调用成功,解析参数
}
}