微信分享自定义内容

废话不多说,直接上代码

HTML代码

  
   
    
    
    
  
  
		微信分享开发
	  banner01
   

注意:link: window.location.href,这个链接最好不要写死,如果想要在后面加上参数,二次分享这样写死有问题,就是别人点击分享的url还是第一次分享的url,可以和下面的一样动态加载

linkUrl = window.location.href;
url = linkUrl.split("?")[0];
linkUrl = url+'?userid='+userid;

 

PHP代码

doCurlGetRequest($access_token);
	    $access_msg = json_decode($this->httpGet($access_token));
	    $jsapi_ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_msg->access_token."&type=jsapi";
	    $this->session()->start();
	    $ticket = $_SESSION['ticket'];
	    if(!$ticket){
	    	$jsapi_ticket_msg = json_decode($this->httpGet($jsapi_ticket_url));
	    	$_SESSION['ticket'] = $jsapi_ticket_msg->ticket;
	    	$ticket = $jsapi_ticket_msg->ticket;
	    }
	    $noncestr = $this->create_noncestr();
	    $time = time();
	    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    	$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
	    $string = "jsapi_ticket=$ticket&noncestr=$noncestr×tamp=$time&url=$url";
    	$signature = sha1($string);
		$view = new View('wxshare/index');
		$view->time = $time;
		$view->noncestr = $noncestr;
		$view->signature = $signature;
		$view->css_list = $css_list;
		$view->render();
	}
	
	private function create_noncestr($length = 16) {
	    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	    $str = "";
	    for ($i = 0; $i < $length; $i++) {
	      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
	    }
	    return $str;
	}

    // 数据签名 
    public function create_signature($nocestr,$ticket,$timestamp,$url){
		$signature = "";
		// 这里参数的顺序要按照 key 值 ASCII 码升序排序
		$s = "jsapi_ticket=" . $ticket . "&noncestr=" . $nocestr . "×tamp=" . $timestamp . "&url=" . $url;
		return sha1($s);
	}
	
	
	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 下载新的证书判别文件。
	    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
	    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
	    curl_setopt($curl, CURLOPT_URL, $url);
	
	    $res = curl_exec($curl);
	    curl_close($curl);
	
	    return $res;
	}

}

需要注意的是一下情况可能引起非法签名

微信分享自定义内容_第1张图片

官方有文档DEMO:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115,附录5

 

 

你可能感兴趣的:(微信公众号)