跳转到内容

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: 调用成功,解析参数
  }
}

Released under the MIT License.