微信公众账号

需要一个认证的微信公众号,一定要确定认证

在登录微信公众平台https://mp.weixin.qq.com
在公众号设置–>功能设置,填写设置Js接口安全域名、网页授权域名、业务域名

开始做之前,网上有些文档,只是说要设置js接口安全域名,结果一直报错 40048,invalid url domain

说是域名不合法,最后查到一个文章说 最好把网页授权域名、业务域名跟js接口安全域名保持一致。

设置以后,不报错了。

服务器端php代码

获取签名等信息,必须通过服务器返回,不能在前端js生成

代码是在laravel框架中写的

路由

//获取微信分享config
Route::get('getWechatConfig', 'ApiWeChatController@getWechatConfig');

控制器

<?phpnamespace App\Http\Controllers\Api;use App\Extend\WeChat\JSSDK;class ApiWeChatController extends ApiCommonController
{/*** 获取微信分享配置*/public function getWechatConfig(){$url = request()->input('url');$jssdk = new JSSDK("开发者ID(AppID)", "开发者密码(AppSecret)");$return = $jssdk->GetSignPackage($url);$this->setReturn(1, '成功', $return);}
}

jssdk.php

<?php
namespace App\Extend\WeChat;use Illuminate\Support\Facades\Cache;class JSSDK
{private $appId;private $appSecret;public function __construct($appId, $appSecret){$this->appId = $appId;$this->appSecret = $appSecret;}public function getSignPackage($url){$jsapiTicket = $this->getJsApiTicket();// 注意 URL 一定要动态获取,不能 hardcode./*$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";*/$timestamp = time();$nonceStr = $this->createNonceStr();// 这里参数的顺序要按照 key 值 ASCII 码升序排序$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";$signature = sha1($string);$signPackage = array("appId" => $this->appId,"nonceStr" => $nonceStr,"timestamp" => $timestamp,//"url" => $url,"signature" => $signature,//"rawString" => $string);return $signPackage;}private function createNonceStr($length = 16){$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";$str = "";for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;}private function getJsApiTicket(){// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例$data = json_decode($this->get_php_file("jsapi_ticket"));if (empty($data)) {$accessToken = $this->getAccessToken();// 如果是企业号用以下 URL 获取 ticket// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";$res = json_decode($this->httpGet($url));$ticket = $res->ticket;if ($ticket) {$data['expire_time'] = time() + 7000;$data['jsapi_ticket'] = $ticket;$this->set_php_file("jsapi_ticket", json_encode($data));}} else {$ticket = $data->jsapi_ticket;}return $ticket;}private function getAccessToken(){// access_token 应该全局存储与更新,以下代码以写入到文件中做示例$data = json_decode($this->get_php_file("access_token.php"));if (empty($data)) {// 如果是企业号用以下URL获取access_token// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";$res = json_decode($this->httpGet($url));$access_token = $res->access_token;if ($access_token) {$data['expire_time'] = time() + 7000;$data['access_token'] = $access_token;$this->set_php_file("access_token", json_encode($data));}} else {$access_token = $data->access_token;}return $access_token;}private function httpGet($url){$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_TIMEOUT, 500);// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。$debug = config('app.debug');if(!$debug) {curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);}else{curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);}curl_setopt($curl, CURLOPT_URL, $url);$res = curl_exec($curl);curl_close($curl);return $res;}private function get_php_file($filename){return Cache::get($filename);}private function set_php_file($filename, $content){Cache::put($filename, $content, 119);}
}

设置ip白名单 ip是自己的服务器ip

剩下的就交给前端来操作就可以了!

微信分享公众账号设置及服务器端代码相关推荐

  1. App中 微信分享 代付功能 业务设计 与 代码实现

    先上图 场景 本例的代付场景是,开发一款APP应用,APP中具有支付能力,按照微信 支付对接要求已经完成APP支付的对接.现在要玩点新花样,找人代付订 单.用户在APP中下单后选择找人代付,将分享H5 ...

  2. php网页分享时显示图片怎么设置,分享html页面 在微信分享中可以设置分享标题和描述和图片...

    微信中分享页面已经是很流行的一种方式,那么如何可以让自己做的h5页面能设置分享标题.描叙和图片呢? 问题 第三方网站在微信中分享的链接想要左边有简介概述,右边有缩略图,没有缩略图不能引起客户足够的重视 ...

  3. 新浪云python开发_python,flask,SAE(新浪云),搭建开发微信公众账号

    将我们的服务器放在新浪云上,搭建微信公众账号,下面的代码将实现获取微信token,实现最简单的消息对话(用户说什么,我们回复什么). 因为网上有的代码有错,所以将这个传上来供大家借鉴 注意,代码中的空 ...

  4. JAVA实现微信公众账号自定义消息回复

    最近有没有在玩微信公众账号?很多公众账号有自动回复功能,比如爱范儿的appsolution发送Android或者IOS,它就会想你推荐好玩的app. 微信对公众账号提供了api接口来自定义回复介绍到的 ...

  5. android微信分享怎么自定义样式,自定义微信分享样式教程

    使用场景: 当网站浏览者访问你的网站的时候,情不自禁分享.然而,样式怎么这么挫? 分享别人的网站链接,却是这样的样式,为什么呢? 答案:你没有设置"自定义 微信分享样式" 共有三个 ...

  6. php分享网页到微信,分享网页链接到微信朋友圈或朋友

    前提 微信自6.5.5版本起对分享网页链接做了限制,如果不接入JSSDK,则分享出去的内容不会显示自定义的图片,而是显示一张默认图片 使用JSSDK进行分享时,需要一个经过微信认证的服务号或者订阅号, ...

  7. 微信分享踩坑记(一)——微信生态右上角自定义分享(微信JS-SDK)

    使用框架:Vue.js.微信JS-SDK.HTML5+(HBuilder) 两种场景:微信生态右上角自定义分享.APP分享到微信 1' 公众号设置JS安全域名 公众号开发者可在该域名下调用微信开放的J ...

  8. vue移动端网页微信分享

    vue移动端网页微信分享 1. 开篇说明 2. 过程 3. 先上代码 4. 使用说明 兼容ios 5. 注意 1. 为什么请求后端接口时,url需要编码---encodeURIComponent 2. ...

  9. 微信分享功能踩坑过程

    最近,做一款应用的分享功能,主要业务是分享一个网页给微信.QQ好友,然后用的是微信开发平台.腾讯开放平台的官方SDK分享.其中遇到了一些打不开.分享不了的坑,填好后,做了一下封装.总结记录一下. 废话 ...

最新文章

  1. 桌面应用程序 azure_如何开始使用Microsoft Azure-功能应用程序,HTTP触发器和事件队列...
  2. InnoDB O_DIRECT选项漫谈(一)【转】
  3. 使用Letax引用文献一直报错: LaTeX Error: Something‘s wrong--perhaps a missing \item
  4. Ubuntu安装apache+Yii2
  5. 干货|MIT线性代数课程精细笔记[第一课]
  6. Linux两种定时器
  7. python-day19-面向对象进阶-加载顺序,命名空间,组合(实现松耦合)
  8. python沙箱逃逸小结
  9. 社工查询-最强社工查询网址汇总
  10. 手提电脑无法管理计算机,细说笔记本键盘无法输入怎么办
  11. #创新应用#豆果美食:贴心的美食专家!
  12. 51nod3155 跳房子
  13. Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations...
  14. java导出乱码_导出文件乱码问题处理(java)
  15. 非遗在线商城小程序(后台PHP开发)
  16. android接入第三方SDK
  17. WPScan使用完整攻略:如何对WordPress站点进行安全测试
  18. 【数据结构】测试7 图
  19. Java连接数据库(自学笔记)
  20. Maven2 的新特性

热门文章

  1. 基于梯度优化的混沌PSO算法matlab仿真以及在磁悬浮球系统方面的应用
  2. 微信点击链接获取对方定位,通过文字图片链接获取对方定位
  3. 七麦研究院首发AR产品数据报告,数读App Store上的AR世界
  4. 【视觉高级篇】27 # 如何实现简单的3D可视化图表:GitHub贡献图表的3D可视化?
  5. 一个小程序入门matlab
  6. 利用 a 标签 实现 下载图片(不是打开)的正确姿势
  7. 地图数据的存储探索(GIS)
  8. 杭电1099_杭电数学题合集
  9. linux emule 编译 wx-config --libs,如何编译 eMule v0.46b
  10. puzzle(0211)几何划分问题