首先说下需求:
我有一个网站,网站上有很多作者分享自己的作品,如果其他用户浏览作品后想联系这位作者,就需要扫码关注我们的平台,我们会推送对方的联系方式。
第一步,生成带参数的二维码
步骤:
1.用微信appid和appsecret获取access_token
2.用access_token获取二维码的ticket,这其中要用json格式传入固定格式的值才能获取到ticket,传值的时候你可以在scene_id中带上自己的参数,方便用户扫码后回调的时候处理
3.用ticket直接得到二维码图片(注意:用这个方式,微信服务器返回的是图片的数据流。如果你需要处理二维码的图片,你不需要考虑如何操作这个数据流,只需要把整个访问微信的字符串带上ticket当成一个图片的地址放在src中就可以了,你可以操作图片本身)
下面是代码,省略了一些处理返回值的model类
/// <summary>
/// 生成二维码
/// </summary>
/// <returns></returns>
[HttpPost]
public IHttpActionResult CreateImg(dynamic data)
{
//用户ID
int uid = Convert.ToInt32(data.userid);
//get token
string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=**********&secret=****************");
var wm = new System.Net.Http.HttpClient().GetAsync(url).Result.Content.ReadAsStringAsync().Result;
WechatModels info = JsonConvert.DeserializeObject<WechatModels>(wm);
//get ticket
string turl = string.Format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}", info.access_token);
var jsonInfo = "{\"action_name\": \"QR_LIMIT_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + uid + "}}}";
HttpContent httpContent = new StringContent(jsonInfo);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
var tickets = new System.Net.Http.HttpClient().PostAsync(turl, httpContent).Result.Content.ReadAsStringAsync().Result;
TicketInfo tinfo = JsonConvert.DeserializeObject<TicketInfo>(tickets);
//get imgUrl
string imgUrl = string.Format("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}", System.Web.HttpUtility.UrlEncode(tinfo.ticket));
//var res = new System.Net.Http.HttpClient().GetAsync(imgUrl).Result.Content.ReadAsStringAsync().Result;
return Json(imgUrl);
}
第二步,用户扫码后的处理
处理的前提是你已经在公众号中配置完成
如图,服务器地址中的方法,就是扫