需求:用户点生成二维码,然后生成小程序二维码,然后下个用户扫一下成为被扫者的下级。
难点:图片文件流流的转换(新建文件,写入文件流,其实就是一堆乱码)
// 获得小程序分享二维码
public function shares(){
$appId = 'wx0f1aa594555ac1b278f';
$secret = 'ed495f43312b53eb69b844f391d2ff33a05';
$code = input('code');
<span class="hljs-variable">$weChat</span> = <span class="hljs-keyword">new</span> WeChat(<span class="hljs-variable">$appId</span>, <span class="hljs-variable">$secret</span>);
<span class="hljs-comment">// 获得openid</span>
<span class="hljs-variable">$openId</span> = <span class="hljs-variable">$weChat</span>->getOpenId(<span class="hljs-variable">$code</span>);
<span class="hljs-variable">$openId</span> = <span class="hljs-keyword">isset</span>(<span class="hljs-variable">$openId</span>[<span class="hljs-string">'openid'</span>]) ? <span class="hljs-variable">$openId</span>[<span class="hljs-string">'openid'</span>] : <span class="hljs-string">''</span>;
<span class="hljs-comment">// 如果code能换回openid</span>
<span class="hljs-keyword">if</span> (<span class="hljs-variable">$openId</span>) {
<span class="hljs-comment">// 查询该用户有没有点过生成小程序码</span>
<span class="hljs-variable">$qrcode</span> = db(<span class="hljs-string">'user'</span>)
->field(<span class="hljs-string">'qrcode'</span>)
->where(<span class="hljs-string">'openid'</span>,<span class="hljs-variable">$openId</span>)
->find();
<span class="hljs-comment">// 如果没有生成过小程序码</span>
<span class="hljs-keyword">if</span>(<span class="hljs-variable">$qrcode</span>[<span class="hljs-string">'qrcode'</span>]){
<span class="hljs-keyword">return</span> jsonReturn(CommonModel::CODE_200,CommonModel::MSG_200,<span class="hljs-variable">$qrcode</span>);
}<span class="hljs-keyword">else</span>{
<span class="hljs-comment">// 获得access_key</span>
<span class="hljs-variable">$accessTokenOpenid</span> = <span class="hljs-variable">$weChat</span>->getAccessToken(<span class="hljs-variable">$code</span>);
<span class="hljs-variable">$accessToken</span> = <span class="hljs-variable">$accessTokenOpenid</span>[<span class="hljs-string">'access_token'</span>];
<span class="hljs-comment">// 获得小程序吗,这个返回的是数组</span>
<span class="hljs-variable">$info</span> = <span class="hljs-variable">$weChat</span>->getWxacode(<span class="hljs-variable">$accessToken</span>,<span class="hljs-string">'pages/index?query='</span>.<span class="hljs-variable">$openId</span>);
<span class="hljs-variable">$info</span> = <span class="hljs-variable">$info</span>[<span class="hljs-number">1</span>];
<span class="hljs-comment">//保存地址</span>
<span class="hljs-variable">$imgDir</span> = <span class="hljs-string">'img/qrcode/'</span>;
<span class="hljs-comment">//要生成的新图片名字</span>
<span class="hljs-variable">$filename</span> = md5(time().mt_rand(<span class="hljs-number">10</span>, <span class="hljs-number">99</span>)).<span class="hljs-string">".png"</span>;
<span class="hljs-comment">// 组成路径加名称</span>
<span class="hljs-variable">$newFilePath</span> = <span class="hljs-variable">$imgDir</span>.<span class="hljs-variable">$filename</span>;
<span class="hljs-variable">$res</span> = file_put_contents(<span class="hljs-variable">$newFilePath</span>,<span class="hljs-variable">$info</span>);
<span class="hljs-variable">$qiniuUrl</span> = CommonModel::upload(<span class="hljs-variable">$newFilePath</span>);
<span class="hljs-keyword">if</span>(<span class="hljs-variable">$res</span>){
db(<span class="hljs-string">'user'</span>)
->where(<span class="hljs-string">'openid'</span>,<span class="hljs-variable">$openId</span>)
->update([<span class="hljs-string">'qrcode'</span>=><span class="hljs-variable">$qiniuUrl</span>]);
}
<span class="hljs-keyword">return</span> jsonReturn(CommonModel::CODE_200,CommonModel::MSG_200,<span class="hljs-variable">$qiniuUrl</span>);
}
}<span class="hljs-keyword">else</span>{
<span class="hljs-keyword">return</span> jsonReturn(CommonModel::CODE_404, CommonModel::MSG_404);
}
}
