微信相关接口对接示例(php)

微信相关接口对接示例

提示:如果遇到其他接口问题,欢迎留言,我会根据您的留言去补充对接示例,以供大家学习参考



前言

如果文章对大家有参考价值,欢迎留言点赞

提示:以下是本篇文章正文内容,下面案例可供参考

一、微信获取access_token:示例

publicfunction getAccessToken($appid,$appAecret){

        $access_token = Cache::store('redis')->get($this->MINI_ACCESS_TOKEN);//获取缓存信息
        if(!empty($access_token) && $access_token != null){
            return $access_token;
        }
        $token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appAecret;
        $res = $this->httpGet($token_url);
        if($res->access_token){
        	//存入缓存,设置过期时间,推荐90分钟
            Cache::store('redis')->set($this->MINI_ACCESS_TOKEN,$res->access_token,4800);
            return $res->access_token;
        }
        return [];
    }

二、检测用户是否关注公众号:示例

public function checkUserAttention($open_id)
{
    $access_token = $server->getAcessToken();
    //openid:公众号openid
    $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$open_id.'&lang=zh_CN';
    $res = $this->httpGet($url);
    logRecord("检测是否关注公众号结果:".json_encode($res));
    $data['subscribe'] = 0;
    if(isset($res->subscribe) && $res->subscribe == 1){
        $data['subscribe'] = 1;
    }
    //subscribe == 1是用户已关注公众号,== 0则是未关注公众号
	return ApiResponse::newSuccess($data);
}

三、获取二维码:示例

public function getQrcodeurl($scene_id,$type = 1) : array{
    Log::record('------------请求微信token start---------------');
    $tokenServer = new WechatTokenServer;
    $token = $tokenServer->getAcessToken();
    Log::record($token);
    Log::record('------------请求微信token end---------------');
    $url = self::QRCODE_URL.'access_token='.$token;
    //生成临时二维码
    $qrcode_array = array(
        'expire_seconds'=> $this->timeout,
    );
    //$type 1:临时二维码 2:永久二维码
    if($type == 1){
        //传递字符串
        if (gettype($scene_id) == 'string') {
            $qrcode_array['action_name'] = 'QR_STR_SCENE';
            $qrcode_array['action_info']['scene']['scene_str'] = $scene_id;
        } else {
            //传递数字
            $qrcode_array['action_name'] = 'QR_SCENE';
            $qrcode_array['action_info']['scene']['scene_id'] = $scene_id;
        }
    }else{
        //传递字符串
        if (gettype($scene_id) == 'string') {
            $qrcode_array['action_name'] = 'QR_LIMIT_STR_SCENE';
            $qrcode_array['action_info']['scene']['scene_str'] = $scene_id;
        } else {
            //传递数字
            $qrcode_array['action_name'] = 'QR_LIMIT_SCENE';
            $qrcode_array['action_info']['scene']['scene_id'] = $scene_id;
        }
    }
    $qrcode = json_encode($qrcode_array);
    Log::record('------------请求微信二维码 start---------------');
    Log::record($qrcode);
    $result = HttpCurl::request($url,$qrcode);
    // halt($result);
    $ticketArray = json_decode($result,true);
    Log::record($ticketArray);
    Log::record('------------请求微信二维码 end---------------');
    if (empty($ticketArray)){
        return [];
    }
    //判断如果返回40001 错误 那么刷新token再来一次
    if (array_key_exists('errcode', $ticketArray) && $ticketArray['errcode'] == self::TOKEN_ERROR) {
        $tokenServer->deleteAcessToken();
        return $this->getQrcodeurl($scene_id);
    }
    return $ticketArray;
}

四、获取unionid:示例

public function getUnionid(Request $request)
{
    if ($request->isPost()) {

        $data = postMore([
            ['code', ''],
        ]);
        logRecord('小程序code:'.json_encode($data).'appid:'.$this->_mini_appId.'secret'.$this->_mini_appSecret);

        //获取小程序unionid、openid、session_key
        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$this->_mini_appId.'&secret='.$this->_mini_appSecret.'&js_code='.$data['code'].'&grant_type=authorization_code';
        $res = $this->httpGet($url);
        return res;
}

五、微信解密小程序手机号:示例

public function  decryptData( $encryptedData, $iv,$sessionKey, &$data )
{
    $appid = config('wechat.MiniAppID');
    if (strlen($sessionKey) != 24) {
        return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_AES_KEY), ApiResponse::ILLEGAL_AES_KEY);
    }
    $aesKey=base64_decode($sessionKey);
    if (strlen($iv) != 24) {
        return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_IV), ApiResponse::ILLEGAL_IV);
    }
    $aesIV=base64_decode($iv);
    $aesCipher=base64_decode($encryptedData);
    $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
    $dataObj = json_decode($result);
    if($dataObj  == NULL){
        return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_BUFFER), ApiResponse::ILLEGAL_BUFFER);
    }
    if( $dataObj->watermark->appid != $appid )
    {
        return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_BUFFER), ApiResponse::ILLEGAL_BUFFER);
    }
    return json_decode($result,true);
}

六、微信客服消息:示例

//access_Token 这个就不多说了,通过获取token接口获取
$access_Token = $this->getAccessToken();
//发送客服消息的url
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_Token;
//发送内容
$content = '文本内容<a href="http://www.qq.com" data-miniprogram-appid="AppID" data-miniprogram-path="pages/index/index">点击跳小程序</a>';
//发送数据
$miniData = [
    "touser"=>'OPENID',
    "msgtype"=>"text",
    "text"=> [
        "content"=>$content
    ]
];
$ret = HttpCurl::request($url,json_encode($miniData, JSON_UNESCAPED_UNICODE));

七、获取urlLink:示例

public function urlLink() {
	//_mini_appId:小程序的appid,_mini_appSecret:小程序的appSecret
	$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->_mini_appId.'&secret='.$this->_mini_appSecret;
    $ret = $this->httpGet($url);
    $access_token = $ret->access_token;
    $urlLink = 'https://api.weixin.qq.com/wxa/generate_urllink?access_token='.$access_token;
    $data = [
        'is_expire'=>true,
        'expire_type'=>1,
        'expire_interval'=>3,
    ];
    $result = HttpCurl::request($urlLink,json_encode($data));
}

八、get请求:

public function httpGet($url) {
    $ch = curl_init();//初始化curl
    curl_setopt($ch, CURLOPT_URL,$url); //要访问的地址
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过证书验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    $data = json_decode(curl_exec($ch));
    if(curl_errno($ch)){
        Log::record('jd解析::传的文档格式错误::'.curl_error($ch));//若错误打印错误信息
    }
    curl_close($ch);//关闭curl
    return $data;
}

九、post请求:

public static function request($url, $data, $method = 'POST', $header = array(), $time_out = 60,$connect_time_out = 30)
{
    $defaults = array(
        CURLOPT_HEADER => 0,  //输出返回头信息 false 关闭
        CURLOPT_HTTPHEADER => $header, //header头信息
        CURLOPT_RETURNTRANSFER => 1, //如果成功只将结果返回,不自动输出任何内容。
        CURLOPT_TIMEOUT => $time_out, //设置超时,从服务器接收缓冲完成前需要等待多长时间
        CURLOPT_CONNECTTIMEOUT => $connect_time_out,//在成功连接服务器前等待多久
        CURLOPT_SSL_VERIFYPEER => 0,//部分链接url要以https协议进行,设定以跳过证书验证
        CURLOPT_SSL_VERIFYHOST => 0, //从证书中检查SSL加密算法是否存在
    );
    if ($method == 'POST') {
        $defaults[CURLOPT_POST] = 1; //true时发送post请求;
        $defaults[CURLOPT_POSTFIELDS] = is_array($data) ? http_build_query($data) : $data;
        $defaults[CURLOPT_URL] = $url;
    }elseif($method == 'DELETE'){
        $defaults[CURLOPT_CUSTOMREQUEST]   = "DELETE"; //发送delete请求;
        $defaults[CURLOPT_URL]             = $url.'?'.$data;
    }elseif($method == 'PUT'){
        $defaults[CURLOPT_CUSTOMREQUEST]   = "PUT"; //发送delete请求;
        $defaults[CURLOPT_POSTFIELDS] = is_array($data) ? http_build_query($data) : $data;
        $defaults[CURLOPT_URL]             = $url;
    }else {
        $defaults[CURLOPT_URL] = $url . '?' . http_build_query($data);
    }
    $ch = curl_init();//初始化curl
    curl_setopt_array($ch, $defaults);
    $result = curl_exec($ch); //执行curl请求
    if (curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $result;
}

总结

以上是部分微信接口对接示例,需要根据剔除一些无用打印。欢迎留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值