mStoreID; $pcode = $other['product_code']; $thrid_refill = Model('thrid_refill'); $product = $thrid_refill->getProviderProduct($store_id, $goods_id, $pcode); if (empty($product)) { Log::record("cannot find provider's produce where name={$this->mName}, goods_id = {$goods_id} pcode={$pcode}", Log::ERR); return [0, 0]; } else { return [$goods_id, ncPriceFormat($product['channel_amount'])]; } } private function getProductCode($goods_id, $sys_pcode) { $thrid_refill = Model('thrid_refill'); $store_id = $this->mStoreID; $product = $thrid_refill->getProviderProduct($store_id, $goods_id, $sys_pcode); if (empty($product)) { return false; } else { return $product['channel_code']; } } private function get_mobile_info(int $phone): array { $params['appkey'] = config::APP_KEY; $params['customer'] = $phone; $params['timestamp'] = time(); $params['sign'] = $this->sign($params); $resp = http_request(config::GET_MOBILE_INFO_URL, $params, 'GET', false, [], $net_errno); if (empty($resp)) { return [false, '网络错误']; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if($resp['resultCode'] == 1000) { return [$resp['areaId'], $resp['carrierId']]; }else{ return [false, $resp['resultReason']]; } } } public function get_product(int $phone): array { [$areaId, $carrierId] = $this->get_mobile_info($phone); if(empty($areaId)) { return [false, $carrierId]; } $params['appkey'] = config::APP_KEY; $params['areaId'] = $areaId; $params['carrierId'] = $carrierId; $params['timestamp'] = time(); $params['sign'] = $this->sign($params); $resp = http_request(config::GET_PRODUCT_URL, $params, 'GET', false, [], $net_errno); if (empty($resp)) { return [false, '网络错误']; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if($resp['resultCode'] == 1000) { $prodList = $resp['prodList']; return [true, $prodList]; }else{ return [false, $resp['resultReason']]; } } } private function req_params(int $phone, string $order_sn) { $params['appkey'] = config::APP_KEY; $params['customer'] = $phone; $params['prodPayType'] = 0; $params['prodType'] = 1; $params['notifyUrl'] = config::NOTIFY_URL; $params['channelOrderNo'] = $order_sn; $params['timestamp'] = time(); return $params; } public function add($card_no, $card_type, $amount, $params,&$net_errno = 0) { $order_sn = $params['order_sn']; $goods_id = intval($params['goods_id']); $product_code = $this->getProductCode($goods_id, $params['product_code']); $product = config::Products[$product_code]; if(empty($product)) { return [false, '产品有误', false]; } $params = $this->req_params($card_no, $order_sn); $params['prodValue'] = $product['prodValue']; $params['prodScope'] = $product['prodScope']; $params['validate'] = $product['validate']; $params['sign'] = $this->sign($params); $resp = http_request(config::ORDER_URL, $params, 'GET', false, [], $net_errno); if (empty($resp)) { return [false, '网络错误', true]; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if (empty($resp)) { return [false, '网络错误', true]; } elseif ($resp['resultCode'] == 1000) { return [true, $resp['orderNo'], false]; } else { return [false, $resp['resultReason'], false]; } } } public function query($refill_info) { $params['appkey'] = config::APP_KEY; $params['orderNo'] = $refill_info['ch_trade_no']; $params['timestamp'] = time(); $params['sign'] = $this->sign($params); $resp = http_request(config::QUERY_URL, $params, 'GET', false, []); if (empty($resp)) { return [false, '网络错误']; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if (empty($resp)) { return [false, '网络错误']; } elseif($resp['resultCode'] == 1000) { $status = intval($resp['order']['orderStatus']); if ($status === 4) { $order_state = ORDER_STATE_SUCCESS; } elseif (in_array($status, [2,5])) { $order_state = ORDER_STATE_CANCEL; } elseif (in_array($status, [0,1,3])) { $order_state = ORDER_STATE_SEND; } else { return [false, $resp['resultReason']]; } return [true, $order_state]; } else { return [false, $resp['resultReason']]; } } } public function balance() { $params['appkey'] = config::APP_KEY; $params['timestamp'] = time(); $params['sign'] = $this->sign($params); $resp = http_request(config::BALANCE_URL, $params, 'GET', false, [], $net_errno); if (empty($resp)) { return [false, '网络错误']; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if (empty($resp)) { return [false, '网络错误']; } elseif ($resp['resultCode'] == 1000) { return [true, $resp['balance']]; } else { return [false, $resp['resultReason']]; } } } private function sign($params) { ksort($params); $content = ''; $secret = config::APP_SECRET; foreach ($params as $key => $value) { if($this->check_empty($value) === false) { $content .= "{$key}{$value}"; } } $content .= $secret; return md5(urlencode($content)); } }