使用easyWeChat 官方文档上描述的 前端直接使用会出现 签名错误 errMsg":"config:fail,invalid signature
https://easywechat.com/5.x/basic-services/jssdk.html
/**
* 公众号签名
* @return void
* @throws \Psr\SimpleCache\InvalidArgumentException
*/
public function getOfficialAccount1()
{
$url = $this->request->param('url');
$config = [
'app_id' => 'your app_id',
'secret' => 'your app_secret',
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
//...
];
$app = Factory::officialAccount($config);
if($url)
{
// $url = explode('#',$request->url);
$app->jssdk->setUrl(urldecode($url));
}
$data = json_decode($app->jssdk->buildConfig(array('updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage'),true),true);
$this->success("获取成功",$data);
}
使用 https://www.weixinsxy.com/jssdk/#menu-location 查看权限
返回值----> singtrue 提示 errMsg":"config:fail,invalid signature
解决 获取token jsapi_ticket 来验证 签名是否正确
验证签名 ----->https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
public function getOfficialAccount()
{
$url = $this->request->param('url');
$config = [
'app_id' => 'your app_id',
'secret' => 'your app_secret',
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
'response_type' => 'array',
//...
];
$app = Factory::officialAccount($config);
$access_token = $app->access_token->getToken();
$jsapi_ticket = $app->jssdk->getTicket();
if($url)
{
// $url = explode('#',$url);
$app->jssdk->setUrl(urldecode($url));
// $app->jssdk->setUrl($url);
}
// $data = json_decode($app->jssdk->buildConfig(array('updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage'),true),true);
$data = json_decode($app->jssdk->buildConfig(array('updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage'),false),true);
// $info = ['access_token'=>$access_token,'jsapi_ticket'=>$jsapi_ticket];
// $this->success("",['info'=>$info,'data'=>$data]);
$signature = "jsapi_ticket=".$jsapi_ticket['ticket']."&noncestr=".$data['nonceStr']."×tamp=".$data['timestamp']."&url=".$url;
$res = [
"debug"=>$data['debug'],
"beta"=>$data['beta'],
"jsApiList"=>$data['jsApiList'],
"openTagList"=>$data['openTagList'],
"appId"=>$data['appId'],
"nonceStr"=>$data['nonceStr'],
"timestamp"=>(string)$data['timestamp'],
"url"=>$data['url'],
'signature_old'=>$signature,
'jsapi_ticket'=>$jsapi_ticket['ticket'],
'access_token'=>$access_token['access_token'],
"signature"=>sha1($signature),
];
$this->success("获取成功",$res);
}