|
@@ -0,0 +1,189 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace refill\zhixin;
|
|
|
+
|
|
|
+require_once(BASE_HELPER_RAPI_PATH . '/zhixin/config.php');
|
|
|
+
|
|
|
+use mtopcard;
|
|
|
+use refill;
|
|
|
+use Log;
|
|
|
+
|
|
|
+class RefillPhone extends refill\IRefillPhone
|
|
|
+{
|
|
|
+ public function __construct($cfgs)
|
|
|
+ {
|
|
|
+ parent::__construct($cfgs);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function add_params(int $phone, int $amount, string $order_sn, int $card_type): array
|
|
|
+ {
|
|
|
+ $cp_getter = function ($card_type)
|
|
|
+ {
|
|
|
+ if ($card_type == mtopcard\ChinaMobileCard) {
|
|
|
+ return "01";
|
|
|
+ } elseif ($card_type == mtopcard\ChinaUnicomCard) {
|
|
|
+ return "03";
|
|
|
+ } elseif ($card_type == mtopcard\ChinaTelecomCard) {
|
|
|
+ return "02";
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ $cp = $cp_getter($card_type);
|
|
|
+ if ($cp === false) {
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+ $params = [
|
|
|
+ 'mrch_no' => config::MRCH_NO,
|
|
|
+ 'request_time' => date('YmdHis'),
|
|
|
+ 'client_order_no' => $order_sn,
|
|
|
+ 'product_type' => 1,
|
|
|
+ 'phone_no' => "$phone",
|
|
|
+ 'cp' => $cp,
|
|
|
+ 'city_code' => "",
|
|
|
+ 'recharge_amount' => $amount * 100,
|
|
|
+ 'recharge_type' => 0,
|
|
|
+ 'recharge_desc' => "",
|
|
|
+ 'notify_url' => config::NOTIFY_URL,
|
|
|
+ ];
|
|
|
+
|
|
|
+ $params['sign'] = config::sign($params);
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+
|
|
|
+ //[$state, $errmsg, $neterr]
|
|
|
+ public function add($card_no, $card_type, $amount, $params, &$net_errno = 0): array
|
|
|
+ {
|
|
|
+ $params = $this->add_params($card_no, $amount, $params['order_sn'], $card_type);
|
|
|
+ if (empty($params)) {
|
|
|
+ return [false, '提单参数不符合', false];
|
|
|
+ }
|
|
|
+
|
|
|
+ $resp = http_post_data(config::ORDER_URL, json_encode($params), config::ExtHeaders);
|
|
|
+ if (empty($resp)) {
|
|
|
+ return [false, '网络错误', true];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log::record($resp, Log::DEBUG);
|
|
|
+ $resp = json_decode($resp, true);
|
|
|
+
|
|
|
+ if (empty($resp)) {
|
|
|
+ return [false, '网络错误', true];
|
|
|
+ }
|
|
|
+
|
|
|
+ $nRtn = intval($resp['code']);
|
|
|
+ if ($nRtn === 2) {
|
|
|
+ return [true, $resp['data']['up_order_no'], false];
|
|
|
+ } elseif (in_array($nRtn, config::ERRCODES, true)) {
|
|
|
+ return [false, config::ERRMSG[$nRtn], false];
|
|
|
+ } elseif (in_array($nRtn, [625])) {
|
|
|
+ $net_errno = "HTTP-$nRtn";
|
|
|
+ return [false, "重复订单号", true];
|
|
|
+ } else {
|
|
|
+ $net_errno = "HTTP-998";
|
|
|
+ return [false, "其他异常", true];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function query_params($refill_info)
|
|
|
+ {
|
|
|
+ $params = [
|
|
|
+ 'mrch_no' => config::MRCH_NO,
|
|
|
+ 'request_time' => date('YmdHis'),
|
|
|
+ 'client_order_no' => $refill_info['order_sn'],
|
|
|
+ 'order_time' => date('YmdHis')
|
|
|
+ ];
|
|
|
+ $params['sign'] = config::sign($params);
|
|
|
+
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function query($refill_info): array
|
|
|
+ {
|
|
|
+ $params = $this->query_params($refill_info);
|
|
|
+ $resp = http_post_data(config::QUERY_URL, json_encode($params), config::ExtHeaders);
|
|
|
+
|
|
|
+ if (empty($resp)) {
|
|
|
+ return [false, '系统错误', ''];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log::record($resp, Log::DEBUG);
|
|
|
+ $resp = json_decode($resp, true);
|
|
|
+
|
|
|
+ if (empty($resp)) {
|
|
|
+ return [false, '系统错误', ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ $official_sn = '';
|
|
|
+ $nRtn = intval($resp['code']);
|
|
|
+ if ($nRtn === 2)
|
|
|
+ {
|
|
|
+ $order_id = $refill_info['order_id'];
|
|
|
+ $recharge_status = $resp['data']['recharge_status'];
|
|
|
+
|
|
|
+ if ($recharge_status == "2") {
|
|
|
+ $official_sn = $resp['data']['elecardID'] ?? '';
|
|
|
+ $ch_trade_no = $resp['data']['up_order_no'] ?? '';
|
|
|
+ Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no,'official_sn' => $official_sn]);
|
|
|
+
|
|
|
+ $order_state = ORDER_STATE_SUCCESS;
|
|
|
+ }
|
|
|
+ elseif($recharge_status == "6") {
|
|
|
+ $ch_trade_no = $resp['data']['up_order_no'] ?? '';
|
|
|
+ Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no]);
|
|
|
+
|
|
|
+ $order_state = ORDER_STATE_CANCEL;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $order_state = ORDER_STATE_SEND;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ elseif ($nRtn == 626 && (time() - $refill_info['commit_time'] >= 600)) {
|
|
|
+ $order_state = ORDER_STATE_NOEXIST;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return [false, '其他,或网络错误', ''];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [true, $order_state, $official_sn];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function balance_params()
|
|
|
+ {
|
|
|
+ $params = [
|
|
|
+ 'mrch_no' => config::MRCH_NO,
|
|
|
+ 'request_time' => date('YmdHis')
|
|
|
+ ];
|
|
|
+
|
|
|
+ $params['sign'] = config::sign($params);
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function balance(): array
|
|
|
+ {
|
|
|
+ $params = $this->balance_params();
|
|
|
+ $resp = http_post_data(config::BALANCE_URL, json_encode($params), config::ExtHeaders);
|
|
|
+
|
|
|
+ if (empty($resp)) {
|
|
|
+ return [false, '系统错误'];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log::record($resp, Log::DEBUG);
|
|
|
+ $resp = json_decode($resp, true);
|
|
|
+ if (empty($resp)) {
|
|
|
+ return [false, '系统错误'];
|
|
|
+ } elseif (intval($resp['code']) === 2) {
|
|
|
+ return [true, ncPriceFormat($resp['data']['balance'])];
|
|
|
+ } else {
|
|
|
+ return [false, '其它,失败'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|