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
h5 进入小程序 生成小程序临时链接
最新推荐文章于 2024-02-13 21:08:00 发布