* @version : HUOSDK 8.0 */ namespace huo\controller\pay; use huo\controller\common\Base; use huo\logic\order\OrderLogic; use huo\model\order\OrderModel; use huo\model\order\PayAppleModel; use think\Cache; class SdkOrderCache extends Base { public static function ins() { return new static(); } /** * 获取订单KEY * * @param string $order_id 订单ID * * @return string */ private function getOrderIdKey($order_id) { return 'sdk_order_key_'.$order_id; } /** * 获取SDK订单信息 * * @param string $order_id 订单ID * * @return array|bool|mixed */ public function getInfoByOrderId($order_id) { $_key = $this->getOrderIdKey($order_id); $_order_data_json = Cache::get($_key); $_order_data = json_decode($_order_data_json, true); if (!is_array($_order_data)) { $_order_data = $_order_data_json; } if (!is_array($_order_data) || empty($_order_data)) { $_order_data = (new OrderLogic())->getInfoByOrderId($order_id); if (empty($_order_data)) { return false; } $this->saveOrderCache($order_id, $_order_data); } return $_order_data; } /** * 保存SDK订单cache 数据 * * @param string $order_id 订单ID * @param array $order_data 订单数组 * @param int $ttl */ public function saveOrderCache($order_id, $order_data, $ttl = 3600) { $_key = $this->getOrderIdKey($order_id); Cache::set($_key, json_encode($order_data), $ttl); } /** * 更新SDK订单信息 * * @param string $order_id 订单ID * @param array $order_data 订单数组 * * @return bool */ public function updateOrder($order_id, $order_data) { $_old_data = $this->getInfoByOrderId($order_id); $_data = array_merge($_old_data, $order_data); $this->saveOrderCache($order_id, $_data); unset($_data['payext']); return (new OrderModel())->updateOrder($_data, $_data['id']); } /** * 获取苹果订单KEY * * @param string $trans_id 苹果订单ID * * @return string */ private function getTransIdKey($trans_id) { return 'apple_order_key_'.$trans_id; } /** * 获取苹果订单信息 * * @param string $trans_id 苹果订单ID * * @return array|bool|mixed */ public function getAppleOrderByTransId($trans_id) { $_key = $this->getTransIdKey($trans_id); $_order_data_json = Cache::get($_key); $_order_data = json_decode($_order_data_json, true); if (!is_array($_order_data)) { $_order_data = $_order_data_json; } if (!is_array($_order_data) || empty($_order_data)) { $_order_data = (new PayAppleModel())->getInfoByTransId($trans_id); if (empty($_order_data)) { return false; } $this->saveAppleOrder($trans_id, $_order_data); } return $_order_data; } /** * 保存苹果订单缓存 * * @param string $trans_id 苹果订单ID * @param array $order_data 苹果订单数据 * @param int $ttl */ public function saveAppleOrder($trans_id, $order_data, $ttl = 3600) { $_key = $this->getTransIdKey($trans_id); Cache::set($_key, json_encode($order_data), $ttl); } /** * 更新苹果订单信息 * * @param string $trans_id 苹果订单ID * @param array $order_data 苹果订单数据 * * @return bool */ public function updateAppleOrder($trans_id, $order_data) { $_old_data = $this->getAppleOrderByTransId($trans_id); $_data = array_merge($_old_data, $order_data); $this->saveAppleOrder($trans_id, $_data); if (isset($_data['receipt_data'])) { /* 不更新 receipt_data */ unset($_data['receipt_data']); } return (new PayAppleModel())->updateData($_data, $_data['id']); } }