swoft 获取微信零时二维码 并上传阿里云oss aliyun-oss

发布时间 2023-04-03 17:47:22作者: xyz叶子

 

 

1、获取access_token、两个小时门票过期重新获取

复制代码
    public function AccessToken(){
        $time = time();

        $key = "wx68065208096access_token";

        $accessData = DB::table('db_wx_token')->where('key',$key)->value('token');

         $data = json_decode($accessData,true);

        if ($time < ($data['expire_time']+7000)) {

            $accessToken = $data['access_token'];

        }else{
            $URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$secret";

            $res = HttpCurlGet($URL);

            $Arr = ['expire_time'=>$time,'access_token'=>$res['access_token']];

            DB::table('db_wx_token')->where('key','wx68065208096access_token')->update(['token'=>json_encode($Arr,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)]);

            $accessToken = $res['access_token'];
        }

        return $accessToken;
    }
复制代码

2、调用接口获取零时二维码、零时二维码有效时长7天

复制代码
/**
 * 获取商品零时二维码--带用户参数
*/ 
    public function getZeroTimeQRcode($user_id, $goods_id){
        $admin_id = DB::table('db_user_salses')->where('uid', $user_id)->value('adminid');
$WeChat = new WeChat();

        $AccessToken = $WeChat->AccessToken();

        $url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=".$AccessToken;

     $post_data = ['path'=>'pages/good/goodDetail?user_id='.$user_id.'&goods_id='.$goods_id.'&admin_id='.$admin_id,'width'=>140]; //二维码带上参数和二维码的尺寸要求 $data = json_encode($post_data); $result = HttpCurlPost($url, $data, 30); $Upload = new Upload(); $qrcodeUrl = $Upload->ZeroTimeQRcodeImageUpload($result); //上传到阿里云OSS并返回结果 return $qrcodeUrl; }
复制代码

3、阿里云OSS

复制代码
/**
 *  图片上传阿里云OSS
 *  图片文件直接上传
 */
    public function ZeroTimeQRcodeImageUpload($image){
        $ossClient = new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint']);
            
        $fileName = "ZeroTimeQRcode/".date('Ymd')."/".sha1(date('YmdHis', time()) . uniqid()) .'.png';//零时二维码到阿里云OSS空间下指定的ZeroTimeQRcode/文件下并创建日期文件夹下保存文件

        $result = $ossClient->putObject($config['Bucket'], $fileName, $image); //微信零时二维码接口返回的是对象,所以不能用$ossClient->uploadFile

        if ($result['info']['http_code'] == 200) {
            $msg = "上传成功!";
        }else{
            $msg = "未知错误!";
        }

        $res = Result($result['info']['http_code'], $msg, $fileName);
        
        return $res;
    }
复制代码