遇到了一个需求,就是要生成客户的专属二维码,要求扫码后能关注订阅号,并且将每个扫码的人和这个二维码所属客户绑定,但是系统用的是商户号,商户号不能绑定订阅号,这就存在了怎么确认是同一个客户的问题。
生成带参数的二维码文档
基础帮助类
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
微信官方提供了unionid,在同一个账号主体下,unionid是一样的,前提是需要在开放平台绑定公众号或者小程序,在开放平台认证需要300块人民币。这样在返回用户信息的时候就会返回unionid,如果没有在开放平台绑定,返回的unionid为空。
认证有效期:一年,有效期最后三个月可申请年审即可续期 审核费用:中国大陆地区:300元,非中国大陆地区:120美元
查了下文档,得出一个方案:A是订阅号,B是商户号绑定的服务号,关注A后得到openid,然后获取unionid, 存入系统,之后在B系统登录注册后根据unionid判断是否是同一个人,之后openid绑定到系统账户,当然用unionid也可以,但是之前系统用的是openid,为了减少耦合,就保持原样。
创建二维码的底层方法
public class WxPlatformApi
{
/**
*
* 创建二维码ticket https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
* @param string access_token 调用公众号接口令牌
* @param WxPaydata inputObj 提交给生成二维码API的参数
* @param int timeOut 超时时间
* @throws WxPayException
* @return 成功时返回,其他抛异常
*/
public static WxPayData CreateQRCodeTicket(string access_token, WxPayData inputObj, int timeOut = 6)
{
if (string.IsNullOrWhiteSpace(access_token))
{
throw new Exception("缺少统一支付接口必填参数out_trade_no!");
}
string url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + access_token;
//检测必填参数
if (!inputObj.IsSet("action_name"))
{
throw new Exception("缺少创建二维码ticket接口必填参数action_name!");
}
else if (!inputObj.IsSet("action_info"))
{
throw new Exception("缺少创建二维码ticket接口必填参数action_info!");
}
string xml = inputObj.ToJson();
// Log.Debug("WxPayApi", "UnfiedOrder request : " + xml);
string response = HttpService.PostByJson(xml, url, false, timeOut);
//Log.Debug("WxPayApi", "UnfiedOrder response : " + response);
WxPayData result = new WxPayData();
result.FromJSON(response);
return result;
}
/**
*
* 获取用户基本信息(包括UnionID机制) https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839
* @param WxPaydata inputObj 提交给生成二维码API的参数
* @param int timeOut 超时时间
* @throws WxPayException