h5 进入小程序 生成小程序临时链接

h5端进入小程序

private function get_wxapp_temp_url()
    {
        $url = '';
        $wxappConfig = WxappService::wxappConfig(null);

        $config = [
            'appid' => $wxappConfig['wx_appid'] ?? '这个appid',
            'secret' => $wxappConfig['wx_appsecret'] ?? '这个是秘钥',
        ];
        $wxapp = new Wxapp($config);
        $res = $wxapp->getTempUrl('pages/shop/shopHome/shopHome', 'ru_id=888'); // 访问店铺小程序页面路径
        $res = json_decode($res, true);
        if ($res) {
            $url = isset($res['openlink']) ? $res['openlink'] : '';
        }
        return $url;
    }

/**
     * 唤起小程序临时访问链接
     */
    public function getTempUrl($path = '', $query = '')
    {
        if (!$this->checkAuth()) {
            return false;
        }
        $jump_wxa = [
            'path' => $path,
            'query' => $query
        ];
        $expire_time = time() + 60 * 60;
        $data = ['jump_wxa' => $jump_wxa, 'expire_time' => $expire_time];

        $result = $this->curlPost(self::API_URL_PREFIX . self::GEN_SCHEME . 'access_token=' . $this->access_token, self::json_encode($data));

        if ($result) {
            $json = json_decode($result, true);
            if (!empty($json['errcode'])) {
                $this->errCode = $json['errcode'];
                $this->errMsg = $json['errmsg'];
                return $this->checkRetry(__FUNCTION__, func_get_args());
            }
            return $result;
        }
        return false;
    }




以下的详情文件方法






<?php

namespace App\Modules\Wxapp\Libraries;

use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;

class Wxapp
{
    /**
     * 微信小程序类
     * 官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html?t=20161107
     */
    const API_URL_PREFIX = 'https://api.weixin.qq.com';

    const AUTH_ORIZATION = '/sns/jscode2session?'; // 获取登录凭证(code)

    protected $wx_mini_appid; // 小程序ID
    protected $wx_mini_secret; // 小程序app_secret密钥

    const GET_ACCESS_TOKEN = '/cgi-bin/token?'; // 获取access_token

    const GET_USER_INFO = '/cgi-bin/user/info?'; // 获取unionid

    const GET_WXA_CODE = '/wxa/getwxacode?'; // 获取小程序码 接口A

    const GET_WXA_CODE_UNLIMIT = '/wxa/getwxacodeunlimit?'; // 获取小程序码 接口B

    const GET_WXA_QRCODE = '/cgi-bin/wxaapp/createwxaqrcode?'; // 获取小程序码 接口C

    // 模板消息 小程序模板消息接口将于2020年1月10日下线 开发者可使用订阅消息功能
    const GET_WXA_KEYWORD_LIST = '/cgi-bin/wxopen/template/library/get?'; // 获取模板库某个模板标题下关键词库
    const GET_WXA_TEMPLATE_ADD = '/cgi-bin/wxopen/template/add?'; // 组合模板并添加至帐号下的个人模板库
    const GET_WXA_TEMPLATE_DEL = '/cgi-bin/wxopen/template/del?'; // 删除帐号下的某个模板
    const GET_WXA_TEMPLATE_LIST = '/cgi-bin/wxopen/template/list?'; // 获取帐号下已存在的模板列表
    const GET_WXA_TEMPLATE_SEND_URL = '/cgi-bin/message/wxopen/template/send?';  //发送模板消息 接口地址

    // 订阅消息
    const SUBSCRIBE_MESSAGE_ADD_TEMPLATE = '/wxaapi/newtmpl/addtemplate?'; // 组合模板并添加至帐号下的个人模板库
    const SUBSCRIBE_MESSAGE_DELETE_TEMPLATE = '/wxaapi/newtmpl/deltemplate?'; // 删除帐号下的个人模板
    const SUBSCRIBE_MESSAGE_GET_CATEGORY = '/wxaapi/newtmpl/getcategory?'; // 获取小程序账号的类目
    const SUBSCRIBE_MESSAGE_GET_PUB_TEMPLATE_KEYWORDS = '/wxaapi/newtmpl/getpubtemplatekeywords?'; // 获取模板标题下的关键词列表
    const SUBSCRIBE_MESSAGE_GET_PUB_TEMPLATE_TITLE = '/wxaapi/newtmpl/getpubtemplatetitles?'; // 获取帐号所属类目下的公共模板标题
    const SUBSCRIBE_MESSAGE_GET_TEMPLATE_LIST = '/wxaapi/newtmpl/gettemplate?'; // 获取当前帐号下的个人模板列表
    const SUBSCRIBE_MESSAGE_SEND = '/cgi-bin/message/subscribe/send?'; // 发送订阅消息

    // 直播API
    const MEDIA_UPLOAD_URL = '/cgi-bin/media/upload?'; // 上传临时素材

    // 直播间
    const BROADCAST_ROOM_CREATE = '/wxaapi/broadcast/room/create?';// 创建直播间
    const GET_LIVE_INFO = '/wxa/business/getliveinfo?'; // 获取直播房间列表
    const BROADCAST_ROOM_ADD_GOODS = '/wxaapi/broadcast/room/addgoods?'; //直播间导入已入库的商品

    // 直播商品
    const BROADCAST_GOODS_ADD = '/wxaapi/broadcast/goods/add?';// 商品添加并提审
    const BROADCAST_GOODS_RESETAUDIT = '/wxaapi/broadcast/goods/resetaudit?';// 撤回审核
    const BROADCAST_GOODS_AUDIT = '/wxaapi/broadcast/goods/audit?';// 重新提交审核
    const BROADCAST_GOODS_DELETE = '/wxaapi/broadcast/goods/delete?';// 删除商品
    const BROADCAST_GOODS_UPDATE = '/wxaapi/broadcast/goods/update?';// 更新商品
    const GET_GOODS_WAREHOUSE = '/wxa/business/getgoodswarehouse?';// 获取商品状态
    const GET_GOODS_LIST = '/wxaapi/broadcast/goods/getapproved?';// 获取商品列表

    // 临时链接
    const GEN_SCHEME = '/wxa/generatescheme?'; // 临时链接

    protected $access_token;

    public $debug = false;

    public $errCode = 0;
    public $errMsg = "no access";
    protected $_retry = false;

    public function __construct(array $options)
    {
        $this->wx_mini_appid = isset($options['appid']) ? $options['appid'] : '';
        $this->wx_mini_secret = isset($options['secret']) ? $options['secret'] : '';
    }

    /**
     * code 换取 session_key
     * 调用接口获取登录凭证(code)
     * @param $code
     * @return bool|mixed
     */
    public function getOauthOrization($code)
    {
        $params = [
            'appid' => $this->wx_mini_appid,
            'secret' => $this->wx_mini_secret,
            'js_code' => $code,
            'grant_type' => 'authorization_code'
        ];
        $result = $this->curlGet(self::API_URL_PREFIX . self::AUTH_ORIZATION . http_build_query($params, '', '&'));
        if ($result) {
            $json = json_decode($result, true);
            if (!$json || !empty($json['errcode'])) {
                $this->errCode = $json['errcode'];
                $this->errMsg = $json['errmsg'];
                return false;
            }

            return $json;
        }
        return false;
    }

    /**
     *  code 换取 unionid
     * 调用接口获取登录凭证(code)
     * @param $token
     * @param $openid
     * @return bool|mixed
     */
    public function getUnionid($token, $openid)
    {
        $params = [
            'withCredentials' => true,
            'access_token' => $token,
            'openid' => $openid,
            'lang' => 'zh_CN'
        ];
        $result = $this->curlPost(self::API_URL_PREFIX . self::GET_USER_INFO, self::json_encode($params));

        if ($result) {
            $json = json_decode($result, true);
            if (!$json || !empty($json['errcode'])) {
                $this->errCode = $json['errcode'];
                $this->errMsg = $json['errmsg'];
                return false;
            }
            return $json;
        }
        return false;
    }

    /**
     * 换取 access_token 缓存
     * @return bool|mixed
     */
    protected function checkAuth()
    {
        $cache_id = md5('wxapp_access_token' . $this->wx_mini_secret);

        if (($access_token = $this->getCache($cache_id)) && !empty($access_token)) {
            return $this->access_token = $access_token;
        }

        $result = $this->curlGet(self::API_URL_PREFIX . self::GET_ACCESS_TOKEN . "grant_type=client_credential&appid=" . $this->wx_mini_appid . "&secret=" . $this->wx_mini_secret);
        if ($result) {
            $json = json_decode($result, true);
            if (!$json || !empty($json['errcode'])) {
                $this->errCode = $json['errcode'];
                $this->errMsg = $json['errmsg'];
                return false;
            }

            $this->access_token = $json['access_token'];

            $expire = $json['expires_in'] ? intval($json['expires_in']) - 300 : 7200;
            $this->setCache($cache_id, $this->access_token, $expire);

            return $this->access_token;
        }

        return false;
    }

    /**
     * 删除 access_token 缓存
     */
    public function resetAuth()
    {
        $this->access_token = null;
        $cache_id = md5('wxapp_access_token' . $this->wx_mini_secret);
        $this->removeCache($cache_id);
        return true;
    }

    /**
     * 接口失败重试
     * @param string $method SDK方法名称
     * @param array $arguments SDK方法参数
     * @return bool|mixed
     */
    protected function checkRetry($method, $arguments = [])
    {
        // access_token 超时过期重试
        if (!$this->_retry && in_array($this->errCode, ['40014', '40001', '41001', '42001'])) {
            ($this->_retry = true) && $this->resetAuth();
            $this->errCode = 40001;
            $this->errMsg = 'no access';
            return call_user_func_array([$this, $method], $arguments);
        }
        return false;
    }

    /**
     * 唤起小程序临时访问链接
     */
    public function getTempUrl($path = '', $query = '')
    {
        if (!$this->checkAuth()) {
            return false;
        }
        $jump_wxa = [
            'path' => $path,
            'query' => $query
        ];
        $expire_time = time() + 60 * 60;
        $data = ['jump_wxa' => $jump_wxa, 'expire_time' => $expire_time];

        $result = $this->curlPost(self::API_URL_PREFIX . self::GEN_SCHEME . 'access_token=' . $this->access_token, self::json_enc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值