微信小程序如何生成帶參數的小程序二維碼,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
官方提供生成小程序碼的兩種方式:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html
服務端生成小程序碼
//小程序碼
public function getWxcode()
{
$ACCESS_TOKEN = $this->getWxAccessToken();
$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $ACCESS_TOKEN['access_token'];
$post_data =
array(
'page' => 'pages/my/my', //掃碼跳轉頁面
'scene' => input('invite_code') //用戶邀請碼
);
$post_data = json_encode($post_data);
$data = $this->send_post($url, $post_data);
$result = $this->data_uri($data, 'image/png');
return '<image src='.$result.'></image>';
//return $result;
}
private function getWxAccessToken()
{
$appid = '******';
$appsecret = '*******';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
$access_token = $this->makeRequest($url);
$access_token = json_decode($access_token['result'], true);
return $access_token;
}
/**
* 發起http請求
* @param string $url 訪問路徑
* @param array $params 參數,該數組多于1個,表示為POST
* @param int $expire 請求超時時間
* @param array $extend 請求偽造包頭參數
* @param string $hostIp HOST的地址
* @return array 返回的為一個請求狀態,一個內容
*/
private function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = '')
{
if (empty($url)) {
return array('code' => '100');
}
$_curl = curl_init();
$_header = array(
'Accept-Language: zh-CN',
'Connection: Keep-Alive',
'Cache-Control: no-cache'
);
// 方便直接訪問要設置host的地址
if (!empty($hostIp)) {
$urlInfo = parse_url($url);
if (empty($urlInfo['host'])) {
$urlInfo['host'] = substr(DOMAIN, 7, -1);
$url = "http://{$hostIp}{$url}";
} else {
$url = str_replace($urlInfo['host'], $hostIp, $url);
}
$_header[] = "Host: {$urlInfo['host']}";
}
// 只要第二個參數傳了值之后,就是POST的
if (!empty($params)) {
curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($_curl, CURLOPT_POST, true);
}
if (substr($url, 0, 8) == 'https://') {
curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($_curl, CURLOPT_URL, $url);
curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');
curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);
if ($expire > 0) {
curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 處理超時時間
curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立連接超時時間
}
// 額外的配置
if (!empty($extend)) {
curl_setopt_array($_curl, $extend);
}
$result['result'] = curl_exec($_curl);
$result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);
$result['info'] = curl_getinfo($_curl);
if ($result['result'] === false) {
$result['result'] = curl_error($_curl);
$result['code'] = -curl_errno($_curl);
}
curl_close($_curl);
return $result;
}
/**
* 消息推送http
* @param $url
* @param $post_data
* @return bool|string
*/
private function send_post($url, $post_data)
{
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type:application/json',
//header 需要設置為 JSON
'content' => $post_data,
'timeout' => 60
//超時時間
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return $result;
}
//二進制轉圖片image/png
private function data_uri($contents, $mime)
{
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。