微信带图分享

Posted shopda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信带图分享相关的知识,希望对你有一定的参考价值。

微信分享不带图怎么办,微信转发不带图怎么办,怎么办怎么办

 

1、微信公众平台申请 appId, SecKey, 开通JSAPI

<?php
class JSSDK {
	private $appId;
	private $appSecret;

	public function __construct($appId, $appSecret) {
		$this->appId = $appId;
		$this->appSecret = $appSecret;
	}

	public function getSignPackage() {
		$jsapiTicket = $this->getJsApiTicket();
		$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
		$url = $_GET[‘url‘];
		$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(file_get_contents("jsapi_ticket.json"));
		if ($data->expire_time < time()) {
			$accessToken = $this->getAccessToken();
			$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;
				
				file_put_contents("jsapi_ticket.json", json_encode($data));
				
// 				$fp = fopen("jsapi_ticket.json", "w");
// 				fwrite($fp, json_encode($data));
// 				fclose($fp);
			}
		} else {
			$ticket = $data->jsapi_ticket;
		}

		return $ticket;
	}

	private function getAccessToken() {
		// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
		$data = json_decode(file_get_contents("access_token.json"));
		if ($data->expire_time < time()) {
			$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;
				$fp = fopen("access_token.json", "w");
				fwrite($fp, json_encode($data));
				fclose($fp);
			}
		} 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);
		curl_setopt($curl, CURLOPT_URL, $url);

		$res = curl_exec($curl);
		curl_close($curl);

		return $res;
	}
}

header("Content-Security-Policy: script-src ‘self‘; object-src ‘none‘;style-src cdn.example.org third-party.org; child-src https:");

$jssdk = new JSSDK("app_id", "sec_key");
$signPackage = $jssdk->GetSignPackage();

echo json_encode($signPackage);
exit;

  

2、前端 导入:

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

 

3、延迟加载

$(function (){

      if (window.navigator.userAgent.toLowerCase().indexOf("micromessenger") > -1) {
    	  
    	  setTimeout("share_init()", 1000);
          
          
          
      }
      
        

});

function share_init()
{
    
    
    $.ajax({
    	  url: ‘/wap/wx_jssdk.php‘,
    	  type:‘get‘,
    	  data : {url : window.location.href},
    	  dataType:‘json‘,
    	  success:function(result) {

 
              wx.config({
            	debug: false,
          	    appId: result.appId,
          	    timestamp: result.timestamp,
          	    nonceStr: result.nonceStr,
          	    signature: result.signature,
          	    jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage"]
          	  });
              
			  share_img_url = $(".product_detail_img")[0];
	
          	  wx.ready(function () {
			  
          		wx.onMenuShareTimeline({
          	      title: $(".goods-detail-name dt").text(),
          	      link: window.location.href,
          	      imgUrl: $(share_img_url).attr("src"),
          	      trigger: function (res) {

          	      },
          	      success: function (res) {

          	      },
          	      cancel: function (res) {

          	      },
          	      fail: function (res) {

          	      }
          	    });
				
								
				wx.onMenuShareAppMessage({
				  title: $(".goods-detail-name dt").text(),
				  desc: $(".goods-detail-name dt").text(),
				  link: window.location.href,
				  imgUrl: $(share_img_url).attr("src"),
				  trigger: function (res) {
					
				  },
				  success: function (res) {

				  },
				  cancel: function (res) {

				  },
				  fail: function (res) {
				  }
			 });
          	
          	
          	  });
			  
          	  
    	  }
      });
    
    
    
    
}

 

4、更多JS-API

http://203.195.235.76/jssdk/#menu-share

 

以上是关于微信带图分享的主要内容,如果未能解决你的问题,请参考以下文章

扫描微信带参数二维码事件怎样用java返回一个url

微信带参数二维码保存至本地

微信小程序代码片段

微信小程序代码片段分享

微信带参二维码PHP保存本地问题

微信带场景参数的二维码生成与使用功能实现?