1.各种安全域名配置
2.https://res2.wx.qq.com/open/js/jweixin-1.6.0.js 这个文件一定是最新的 要不按钮出不来
3.wx.config 要配置一下。 我这边自己配置后台php 上代码
<?php
/**
* Class AccessToken
* @package App\Lib\Wechat
* 微信 签名
*/
class WechatConfig
{
//生成签名的时间戳
public $time;
//生成随机字符串
public $nonceStr;
//签名
public $signature;
//AppId
public $appId;
public $url;
public $ticket;
public function __construct($url)
{
$this->url = $url;
$this->setTime();
$this->setNonceStr();
$this->getJsapiTicket();
$this->setAppId();
$this->setSignature();
}
/**
* @return mixed
*/
public function getTime()
{
return $this->time;
}
/**
* @param mixed $time
*/
public function setTime()
{
$this->time = time();
}
/**
* @return mixed
*/
public function getNonceStr()
{
return $this->nonceStr;
}
/**
* @param mixed $nonceStr
*/
public function setNonceStr()
{
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$chars = $chars.$this->time;
$chars = str_shuffle($chars);
$this->nonceStr = substr($chars,0,16);
}
/**
* @return mixed
*/
public function getSignature()
{
return $this->signature;
}
/**
* @param mixed $signature
*/
public function setSignature()
{
//拼接字符串
$string = 'jsapi_ticket='.$this->ticket.'&noncestr='.$this->nonceStr.'×tamp='.$this->time.'&url='.$this->url;
//生成签名
$this->signature = sha1($string);
}
/**
* @param mixed $appId
*/
public function setAppId()
{
$this->appId = config('WeChat.appId');
}
public function getJsapiTicket()
{
$ticket = RedisAction::get('ticket');
if(!$ticket)
{
$token = (new AccessToken())->getAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$token}";
$wechatData = file_get_contents($url);
$data=json_decode($wechatData,true);
if(is_array($data) && isset($data['errmsg']) && $data['errmsg'])
{
$this->ticket = $data['ticket'];
RedisAction::set('ticket',$data['ticket'],3600);
}
}
$this->ticket = $ticket;
}
/**
* @return array
* 执行
*/
public function handle()
{
return [
"appId"=>$this->appId,
"timestamp"=> $this->time,
"nonceStr"=> $this->nonceStr,
"signature"=> $this->signature,
];
}
}
有config 信息以后 配置前端 Vue
按钮信息
<wx-open-launch-weapp
id="launch-btn"
username="小程序的ghID"
path="pages/login/login.html"//页面加html
>
<script type="text/wxtag-template">
<img class="btn" width="28px" src="https://wzproduct.oss-cn-hangzhou.aliyuncs.com/icon/refresh.svg" //图片按钮 只能是外网的 本地路径不可以
alt="">
</script>
</wx-open-launch-weapp>
vue js代码
mounted() {
document.addEventListener('WeixinOpenTagsError', function (e) {
console.log(e.detail.errMsg); // 无法使用开放标签的错误原因,需回退兼容。仅无法使用开发标签,JS-SDK其他功能不受影响
});
var btn = document.getElementById('launch-btn');
console.log(btn)
btn.addEventListener('launch', function (e) {
console.log(e)
console.log('success');
});
btn.addEventListener('error', function (e) {
console.log(e)
console.log('fail', e.detail);
});
},
created() {
const oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = 'https://res2.wx.qq.com/open/js/jweixin-1.6.0.js';
oScript.onload = this.wxmini
document.body.appendChild(oScript);
this.setWxConfig();
},
methods: {
setWxConfig() {
const url = location.href.split('#')[0]; // 注意这里,我的项目中路由模式用的是history模式
// 注意这里是调用接口获取到微信配置相关参数的
weChatConfig({url: url}).then(res => {
if (res.data.code == 200) {
//调用微信配置
this.WxConfig(res)
}
});
},
//微信配置
WxConfig(res) {
wx.config({
debug: false, // 开启调试模式,
appId: res.data.data.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
timestamp: res.data.data.timestamp, // 必填,生成签名的时间戳
nonceStr: res.data.data.nonceStr, // 必填,生成签名的随机串
signature: res.data.data.signature, // 必填,签名,见附录1
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
openTagList: ["wx-open-launch-weapp"], // 这里要配置一下
jsApiList: [
"checkJsApi",
"openLocation",
"getLocation",
"closeWindow",
"scanQRCode",
"chooseWXPay",
"previewImage",
"chooseImage",
"uploadImage",
"getLocalImgData"
],
})
wx.ready(function (res) {
console.log(res)
});
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名
console.log(res)
});
},