微信分享带图片,描述(php版)

最近在为一个php网站添加微信分享带图片,描述的功能,这个功能之前了解过,但并没有彻底实现过,这个功能需要认证的公众号支持。
第一步:在已经认证的公众号配置安全域名(网上很多教程)
第二步:在微信公众平台文档获取示例源码,阅读文档,如果时间紧迫可直接阅读源码
第三步:阅读源码并按需求修改源码

源码地址

源码文档结构如下:
微信分享带图片,描述(php版)_第1张图片

由于网站采用mvc结构,并不能像sample.php那样调用jssdk.php,一开始,我是想直接使用


即将sample.php当成javascript,但后来想了一下,这样做可能会有被跨域调用的风险,还是乖乖地使用ajax方式调用。

这里我先说明一下我遇到的问题,因为debug模式下可能一直弹出wx.config配置不正确的问题
1、先到微信公众号后台查看一下你有没有获取到分享接口的权限,
2、查看一下你的url有没有写死
3、查看一下你的传入的url是不是当前网页的url,否则会报错

代码展示
这里我们需要修改一下代码:
先上代码:
jssdk.php(只需修改getSignPackage方法,由于url不能hardcode,所以url作为参数传入)

//添加参数,$url由ajax传过来
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 = $this->now;
    $nonceStr = $this->createNonceStr();
	
    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";

    $signature = sha1($string);

    $signPackage = array(
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature
    );
   return $signPackage; 
  }

getwxconf.php接收ajax数据并返回wx.conf配置所需数据(json格式)

define('DT_DEBUG', 0);
if(DT_DEBUG) {
	error_reporting(E_ALL);
	$mtime = explode(' ', microtime());
	$debug_starttime = $mtime[1] + $mtime[0];
} else {
	error_reporting(0);
}
if(isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) exit('Request Denied');
@set_magic_quotes_runtime(0);
$MQG = get_magic_quotes_gpc();
foreach(array('_POST', '_GET') as $__R) {
	if($$__R) { 
		foreach($$__R as $__k => $__v) {
			if(substr($__k, 0, 1) == '_') if($__R == '_POST') { unset($_POST[$__k]); } else { unset($_GET[$__k]); }
			if(isset($$__k) && $$__k == $__v) unset($$__k);
		}
	}
}

//以上代码防止$_GET['url']报错

require_once "jssdk.php";//引入jssdk.php

$jssdk = new JSSDK("yourappid", "yoursecret");//配置appid和app_secret
$url = !empty($_GET['url']) ? $_GET['url'] : '';
$signPackage = $jssdk->GetSignPackage($url);//传入url
echo json_encode($signPackage);
?>

修改footer.htm模板文件,加入jssdk



总结:wx.conf这里卡了很久,后来发现是url问题,一开始我是写hardcode,后来查看文档发现必须动态获取;将hardcode改回$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"还是报错,后来发现这个$url获取的是当前php文件的url而不是网页的路径,所以必须在前端传入url参数。
微信分享带图片,描述(php版)_第2张图片

你可能感兴趣的:(php,微信公众平台开发)