最近公司运营报来一个需求:推广的web页面大多是在百度App/手机原生浏览器被打开,而我们推广的一款产品是基于微信小程序,用户在百度App/手机原生浏览器看到推广页,只能下载小程序码到手机,然后用微信扫码打开小程序,体验太繁琐。需求是要能在百度App(包括其他App)、手机原生浏览器直接打开微信小程序。
接到这个需求,最开始是聚焦在微信的静态网站H5跳转小程序:静态网站 H5 跳小程序 | 微信开放文档
这要求必须将静态页面上传到小程序云开发中心,比较麻烦。
后来又聚焦到微信网页开发的开放标签:
发现只有在微信内打开页面,才支持web页直接打开小程序。
最后联想到web网页唤起原生地图App的scheme功能,找到了微信开放平台的获取小程序scheme码和获取小程序Url Link:
这是专门为外部浏览器、App拉起微信小程序开发的。
下面附上PHP生成微信小程序scheme url的代码:
<?php
getUrlScheme();
/**
* 获取url scheme 接口
*/
function getUrlScheme()
{
$access_token = get_accept_access_token();
echo "access_token:".$access_token."\n";
$url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=" . $access_token;
$path = 'pages/index/index';
//query 是指 传的参数
$scene = 'scene=123';
$post_data = [
'jump_wxa' => [
'path' => $path,
'query' => $scene
],
'is_expire' => false,
];
$post_data = json_encode($post_data);
//die($post_data);
$result = api_notice_increment($url, $post_data);
$data = json_decode($result);
var_dump($data);
if($data->errcode==0){
echo '<a target="_blank" href="'.$data->openlink.'">小程序scheme链接:'.$data->openlink.'</a>';
}
}
//获取接单小程序access token
function get_accept_access_token()
{
$appid = ''; //小程序的appid
$secret = ''; //小程序的appsecret
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
$data = file_get_contents($url);
//var_dump($data);exit;
$dats = json_decode($data, true);
return $dats['access_token'];
}
function api_notice_increment($url, $data)
{
$ch = curl_init();
$header = [
"Accept-Charset" => "utf-8"
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
// var_dump($tmpInfo);
// exit;
if (curl_errno($ch)) {
return false;
} else {
// var_dump($tmpInfo);
return $tmpInfo;
}
}
?>
扫描二维码关注公众号,回复:
13290790 查看本文章
