<?php

namespace App\Http\InterfaceClass\SdkImpl;

use App\Http\InterfaceClass\ISdkFactory;
use Illuminate\Support\Facades\Log;
use WpOrg\Requests\Requests;

class Jiuzi implements ISdkFactory
{

    // 登录接口
    protected $login_url = "http://dev-h5sdk.humaiyouxi.com/auth/checktoken";

    /**
     * 登录
     * @param $verInfo 渠道表信息
     * @param $gameInfo 游戏表信息
     * @param $request request 参数
     * @return array
     */
    public function login($verInfo,$gameInfo, $request): array
    {
        $ver_info = is_array($request['ver_info']) ?: json_decode($request['ver_info'],true);
        //获取请求参数
        $postParam = [
            'uid' => $ver_info['uid'],
            'access_token' => $ver_info['token'],
            'gid' => $verInfo->ver_appid,
            'version' => $request['unionId'] ?? 1,
        ];
        //请求url,获取返回值
        $response = Requests::post($this->login_url,[],$postParam)->body;
        //是否验证成功
        $response_arr = json_decode($response,true);
        if ($response_arr['statusCode'] === 200) {
            // 用类标识_渠道userid 标识为融合账号
            $uname = $verInfo->ver."_".$response_arr['data']['user_id'];
            return ['ver_user_id' => $response_arr['data']['user_id'],'uname'=>$uname];
        } else {
            return [];
        }

    }

    /**
     * 支付验签,返回订单号等信息
     * @param $gameInfo
     * @param array $params
     * @return array
     */
    public function pay($verInfo,$gameInfo, $request): array
    {
        // 先验签
        $str = "order_num={$request['order_num']}&partnerid={$request['partnerid']}&user_id={$request['user_id']}&gid={$gameInfo->ver_appid}&sid={$request['sid']}&money={$request['money']}&order_ip={$request['order_ip']}&is_test={$request['is_test']}&game_other={{$request['game_other']}}&payts={{$request['payts']}}&pay_key={$gameInfo->ver_paykey}";
        Log::info("签名明文:".$str);
        $mySign =  strtolower(md5($str));
        if($mySign !== $request['sign']){
            Log::info("签名失败,我方签名:{$mySign},渠道签名:{$request['sign']},渠道request参数:".var_export(request()->post(), true));
            return $this->result(300,'发货失败',$request['order_num']);
        }
        Log::info("签名通过");
        // 通过则返回订单号,金额[单位元]
        return [
            'order_id' => $request['order_num'],
            'money' => $request['money'],
            'result' => $this->result('200','发货成功',$request['order_num'])
        ];
    }

    /**
     * 按渠道的格式返回
     * @param $statusCode
     * @param $message
     * @param $order_id
     * @return array
     */
    protected function result($statusCode,$message,$order_id){
        return [
           'message' => $message,
           'statusCode' => $statusCode,
           'data' => [
               'order_num' => $order_id
           ],
        ];
    }


}