用户管理与账号管理
原创学习目标
• 了解用户管理与账号管理。
• 掌握用户管理。
• 掌握带参数的二维码生成。
当一个微信公众号有较多的用户时,就要考虑用户管理,对这些用户进行分组。在微信公众平台的用户管理中,可以实现新建用户分组、移动用户至指定分组以及修改用户备注等功能。同样,一个单位和个人如果拥有较多的微信公众号,也需要对其进行管理。
用户管理微信公众平台的用户管理模块可以实现对关注用户的分类管理,最初只能简单地对关注用户按照年龄、职业或者性别等进行分类,建立分组,多次更新后,用户可以通过用户管理接口,对公众平台的标签进行创建、查询、修改等操作。
用户标签管理最初是用户分组管理,后来平台升级,将用户管理里的「分组」调整为「标签」。看上去变动很小,但其实这意味着微信公众号的运营者可以更加有针对性地运营自己的公众号。
1. 创建标签
用户标签的引入,主要是方便管理关注者列表以及方便向不同的组别发送消息。一个公众号最多支持创建 100 个标签。
微信对于创建标签的定义如下。
HTTP 请求方式:POST(使用 HTTPS)。
https://www.wechatadd.com
POST 数据格式为 JSON 数据,正常返回的结果如下:
1. { 2. "tag": 3. { 4. "id": 107, 5. "name": "test" 6. } 7. }
为了解析如何实现创建用户标签的 POST 数据操作,下面介绍创建用户的具体过程。首先需要创建一个动态定义的实体类信息,它包含几个需要提及的属性,具体如下:
1. string url = string.Format("https://www.wechatadd.com/ create?access_token={0}", accessToken); 2. var data = new 3. { 4. tag = new 5. { 6. name = name 7. } 8. }; 9. string postData = JsonConvert.SerializeObject(data, Formatting.Indented);
准备好 POST 的数据后,下面进一步介绍获取数据并转换为合适格式的操作代码。
1. tag = BasicAPI.ConvertJson<TagJson>(url, postData); 2. if (tag != null && tag.tag != null) 3. { 4. return tag; 5. } 6. return tag;
这样,完整的创建用户标签的操作函数如下:
1. #region 创建标签 TagJson CreateTag(string accessToken, string name) 2. /// <summary> 3. /// 创建标签 4. /// </summary> 5. /// <param name=「accessToken」> 调用接口凭证 </param> 6. /// <param name=「name」> 标签名称 </param> 7. /// <returns></returns> 8. public TagJson CreateTag(string accessToken, string name) 9. { 10. string url = string.Format(「https://www.wechatadd.com bin/tags/create?access_token={0}」, accessToken); 11. var data = new 12. { 13. tag = new 14. { 15. name = name 16. } 17. }; 18. string postData = JsonConvert.SerializeObject(data, Formatting. Indented); 19. TagJson tag = null; 20. tag = BasicAPI.ConvertJson<TagJson>(url, postData); 21. if (tag != null && tag.tag != null) 22. { 23. return tag; 24. } 25. return tag; 26. } 27. #endregion
其他接口也使用类似的方式,通过传递一些参数进入 URL,获取返回的 JSON 数据。这里定义 TagJson 的实体类信息如下:
1. /// <summary> 2. /// 标签类 3. /// </summary> 4. public class TagJson : BaseJsonResult 5. { 6. /// <summary> 7. /// 标签 ID,由微信分配 8. /// </summary> 9. public int id { get; set; } 10. /// <summary> 11. /// 标签名字,UTF8 编码 12. /// </summary> 13. public string name { get; set; } 14. /// <summary> 15. /// 标签人数 16. /// </summary> 17. public string count { get; set; }
根据以上几个接口的定义,定义以下几个接口,并把它们归纳到用户管理的 API 接口里面。
1. public interface ITagApi 2. { 3. /// <summary> 4. /// 查询所有标签 5. /// </summary> 6. /// <param name=「accessToken」> 调用接口凭证 </param> 7. /// <returns></returns> 8. List<TagJson> GetTagList(string accessToken); 9. /// <summary> 10. /// 创建标签 11. /// </summary> 12. /// <param name=「accessToken」> 调用接口凭证 </param> 13. /// <param name=「name」> 标签名称 </param> 14. /// <returns></returns> 15. TagJson CreateTag(string accessToken, string name); 16. /// <summary> 17. /// 查询用户所在标签 18. /// </summary> 19. /// <param name=「accessToken」> 调用接口凭证 </param> 20. /// <param name=「openid」> 用户的 OpenID</param> 21. /// <returns></returns> 22. List<int> GetUserTagIdList(string accessToken, string openid); 23. /// <summary> 24. /// 修改标签名 25. /// </summary> 26. /// <param name=「accessToken」> 调用接口凭证 </param> 27. /// <param name=「id」> 标签 id,由微信分配 </param> 28. /// <param name=「name」> 标签名字(30 个字符以内)</param> 29. /// <returns></returns> 30. CommonResult UpdateTagName(string accessToken, int id, string name); 31. /// <summary> 32. /// 删除用户标签 33. /// </summary> 34. /// <param name=「accessToken」> 调用接口凭证 </param> 35. /// <returns></returns> 36. CommonResult DeleteTag(string accessToken, int tagid); 37. /// <summary> 38. /// 批量为用户打标签 39. /// </summary> 40. /// <param name=「accessToken」> 调用接口凭证 </param> 41. /// <param name=「 openid_list 」> 用户的 OpenID 列表 </param> 42. /// <param name=「tagid」> 标签 id</param> 43. /// <returns></returns> 44. CommonResult BatchUntagging(string accessToken, List<string> openid_list, int tagid); 45. /// <summary> 46. /// 批量为用户取消标签 47. /// </summary> 48. /// <param name=「accessToken」> 调用接口凭证 </param> 49. /// <param name=「 openid_list 」> 用户的 OpenID 列表 </param> 50. /// <param name=「tagid」> 标签 id</param> 51. /// <returns></returns> 52. CommonResult BatchUntagging(string accessToken, List<string> openid_list, int tagid); 53. }
2. 修改标签名称
根据需要可以修改标签名称,也可以在实际中调整用户所在的标签,操作代码如下:
1. #region 修改标签名 CommonResult UpdateTagName(string accessToken, int id, string name) 2. /// <summary> 3. /// 修改标签名 4. /// </summary> 5. /// <param name=「accessToken」> 调用接口凭证 </param> 6. /// <param name=「id」> 标签 id,由微信分配 </param> 7. /// <param name=「name」> 标签名字(30 个字符以内)</param> 8. /// <returns></returns> 9. public CommonResult UpdateTagName(string accessToken, int id, string name) 10. { 11. string url = string.Format(「https://www.wechatadd.com/ update?access_token={0}」, accessToken); 12. var data = new 13. { 14. tag = new 15. { 16. id = id, 17. name = name 18. } 19. }; 20. string postData = JsonConvert.SerializeObject(data, Formatting.Indented); 21. return BasicAPI.RequestUrlPostDataResult(url, postData); 22. } 23. #endregion
3. 删除标签
删除标签操作更加简单,下面是具体的代码实现。
1. string url = string.Format("https://www.wechatadd.com/ delete?access_token={0}", accessToken); 2. var data = new 3. { 4. tag = new 5. { 6. id = tagid 7. } 8. }; 9. string postData = JsonConvert.SerializeObject(data, Formatting.Indented); 10. return BasicAPI.RequestUrlPostDataResult(url, postData);
4. 批量为用户打标签
用户最多可以打上 20 个标签,打新标签的操作和前面介绍的基本相同,具体代码如下:
1. #region 批量打标签 CommonResult BatchTagging(string accessToken, List<string> openid_list, int tagid) 2. /// <summary> 3. /// 移动用户标签 4. /// </summary> 5. /// <param name=「accessToken」> 调用接口凭证 </param> 6. /// <param name=「 openid_list 」> 用户的 OpenID</param> 7. /// <param name=「tagid」> 标签 id</param> 8. /// <returns></returns> 9. public CommonResult BatchTagging(string accessToken, List<string> openid_list, int tagid) 10. { 11. string url = string.Format(「https://www.wechatadd.com bin/tags/members/batchtagging?access_token={0}」, accessToken); 12. var data = new 13. { 14. openid_list = openid_list, 15. ttagid = tagid 16. }; 17. string postData = JsonConvert.SerializeObject(data, Formatting. Indented); 18. return BasicAPI.RequestUrlPostDataResult(url, postData); 19. } 20. #endregion
5. 批量为用户取消标签
取消用户的标签的操作和前面介绍的基本相同,具体代码如下:
1. #region 批量取消用户标签 CommonResult BatchUntagging (string accessToken, List<string> openid_list, int tagid) 2. /// <summary> 3. /// 移动用户标签 4. /// </summary> 5. /// <param name=「accessToken」> 调用接口凭证 </param> 6. /// <param name=「openid」> 用户的 OpenID</param> 7. /// <param name=「to_tagid」> 标签 id</param> 8. /// <returns></returns> 9. public CommonResult BatchTagging(string accessToken, List<string> openid_list, int tagid) 10. { 11. string url = string.Format(「https://www.wechatadd.com bin/tags/members/batchuntagging?access_token={0}」, accessToken); 12. var data = new 13. { 14. openid_list = openid_list, 15. ttagid = tagid 16. }; 17. string postData = JsonConvert.SerializeObject(data, Formatting. Indented); 18. return BasicAPI.RequestUrlPostDataResult(url, postData); 19. } 20. #endregion
6. 查询用户所在标签列表
每个用户都属于一个标签或多个标签。在「未标签」这个标签里面,默认人们可以通过 API 获取用户的标签信息,也就是获取所在用户标签的 ID 列表,代码如下:
1. #region 查询用户所在标签 List<int> GetUserTagId(string accessToken, string openid) 2. /// <summary> 3. /// 查询用户所在标签 4. /// </summary> 5. /// <param name=「accessToken」> 调用接口凭证 </param> 6. /// <param name=「openid」> 用户的 OpenID</param> 7. /// <returns></returns> 8. public List<int> GetUserTagId(string accessToken, string openid) 9. { 10. string url = string.Format(「https://www.wechatadd.com/ getidlist?access_token={0}」, accessToken); 11. var data = new 12. { 13. openid = openid 14. }; 15. string postData = JsonConvert.SerializeObject(data, Formatting.Indented); 16. List<int> tagIdList = [-1]; 17. TagIdJsonResult result = BasicAPI.ConvertJson<TagIdJsonResult>(url, postData); 18. if (result != null) 19. { 20. tagIdList = result.tagidlist; 21. } 22. return tagIdList; 23. } 24. #endregion
上述这些接口基本上可以实现用户标签管理,另外还有获取公众号已创建的标签和获取标签下的粉丝列表这些接口,其实现方法和上述接口类似。
设备用户备注名使用微信的人很少使用自己的真实姓名,大都使用昵称,然而,如果要找某位朋友,就很难找到了。当给朋友设置备注及标签后,就可以通过这种方式很容易找到。
开发者可以通过设置备注及标签接口对指定用户设置备注名,该接口暂时开放给微信认证的服务号。接口调用的请求说明如下。
HTTP 请求方式:POST(使用 HTTPS)。
https://www.wechatadd.com
POST 数据格式:JSON。
POST 数据例子:
1. { 2. "openid":"oDF3iY9ffA-hqb2vVvbr7qxf6A0Q", 3. "remark":"pangzi" 4. }
参数说明如表 5-1 所示。
表 5-1 设置备注名请求参数说明
参数 | 说明 |
openid | 用户标识 |
remark | 新的备注名,长度必须小于 30 字符 |
正常时返回的 JSON 数据包示例:
1. { 2. "errcode":0, 3. "errmsg":"ok" 4. }
错误时的 JSON 数据包示例(该示例为 AppID 无效错误):
1. { 2. "errcode":40013, 3. "errmsg":"invalid appid" 4. }
本小节介绍如何获得微信公众平台关注用户的基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
当用户关注公众号时,公众号服务器只能获取用户的 OpenID,不能获取用户的其他信息。通过调用用户基本信息接口,公众号可根据 OpenID 获取用户的基本信息,如果开发者有在多个公众号或在公众号、移动应用之间统一用户账号的需求,需要前往微信开放平台,绑定公众号后,才可利用 UnionID 机制来满足上述需求。
接口调用请求说明如下。
HTTP 请求方式:GET。
https://www.wechatadd.com;openid=OPE NID&lang=zh_CN
参数说明如表 5-2 所示。
表 5-2 获取用户基本信息请求参数说明
参数 | 是否必须 | 说明 |
access_token | 是 | 调用接口凭证 |
openid | 是 | 普通用户的标识,对当前公众号唯一 |
lang | 否 | 返回国家地区语言版本:zh_CN 简体中文、zh_TW 繁体中文、en 英语 |
正常情况下,微信会返回下述 JSON 数据包给公众号。
1. { 2. 「subscribe」: 1, 3. 「openid」: 「o6_bmjrPTlm6_2sgVt7hMZOPfL2M」, 4. 「nickname」: 「Band」, 5. 「sex」: 1, 6. 「language」: 「zh_CN」, 7. 「city」: 「广州」, 8. 「province」: 「广东」, 9. 「country」: 「中国」, 10. 「headimgurl」: 「https://www.wechatadd.com 6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eav HiaiceqxibJxCfHe/0」, 11. 「subscribe_time」: 1382694957, 12. 「unionid」: 「 o6_bmasdasdsad6_2sgVt7hMZOPfL」 13. 「remark」: 「」, 14. 「tagid_list」:[128,2] 15. }
参数说明如表 5-3 所示。
表 5-3 返回用户基本信息参数说明

从上述可知,可通过 access_token 来获得用户的基本信息。access_token 产生的方式有两种,一种是使用 AppID 和 AppSecret 获取 access_token,另一种是 OAuth 2.0 授权中产生 access_token。对于前一种,这里称为 App access_token,后一种称为 OAu access_token。下面分别对这两种方式获得用户的基本信息进行说明。
1. 通过 App access_token 获取用户基本信息
(1)用户关注以及回复消息的时候,均可以获得用户的 OpenID。
1. <xml> 2. <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName> 3. <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName> 4. <CreateTime>1372307736</CreateTime> 5. <MsgType><![CDATA[event]]></MsgType> 6. <Event><![CDATA[subscribe]]></Event> 7. <EventKey><![CDATA[]]></EventKey> 8. </xml>
其中的 FromUserName 就是 OpenID。
(2)然后使用 access_token 接口,请求获得 App access_token。
HTTP 请求链接如下:
https://www.wechatadd.com;appid=APPID&secre t=APPSECRET
返回结果如下:
1. { 2. "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiX lDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz 5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ", 3. "expires_in": 7200 4. }
(3)再使用 App access_token 获取 OpenID 的详细信息。
HTTP 请求链接如下:
https://www.wechatadd.com;openid=OPENID
返回结果如下:
1. { 2. 「subscribe」: 1, 3. 「openid」: 「oLVPpjqs2BhvzwPj5A-vTYAX4GLc」, 4. 「nickname」: 「熊猫宝宝」, 5. 「sex」: 1, 6. 「language」: 「zh_CN」, 7. 「city」: 「深圳」, 8. 「province」: 「广东」, 9. 「country」: 「中国」, 10. 「headimgurl」: 「https://www.wechatadd.com PmibRkIs5K2f1tUQ7lFjC63pYHaXGxNDgMzjGDEuvzYZbFOqtUXaxSdoZG6iane5ko9H 30krIbzGv/0」, 11. 「subscribe_time」: 1386160805 12. }
至此已获得用户的基本信息。这种方式最适合用户在关注的时候为用户回复一条欢迎关注 + 用户昵称的信息。
2. 通过 OAuth 2.0 方式弹出授权页面获得用户基本信息
(1)首先配置回调域名,如图 5-1 所示。

图 5-1 配置回调域名
(2)构造请求 URL 如下:
https://www.wechatadd.com;redirect_uri=https://www.wechatadd.com.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
页面 URL 中的 scope=snsapi_userinfo 表示应用授权作用域为请求用户信息。需要注意的是,如果使用别人的 AppID 和 AppSecret,那么获得的 OpenID 是那个有高级接口权限的服务号的。这里可以通过消息回复获取本公众号下的 OpenID,带入回调中,与另一个 OpenID 进行关联,也可以使用开放平台的 UnionID 功能来得到用户在自己账号下的 OpenID。
https://www.wechatadd.com;redirect_uri=https://www.wechatadd.com.php?userid=oc7tbuPA9BgUCLADib5nB3k2KWWg&response_type=code&scope=snsapi_userinfo&state=1#wech at_redirect
将该链接回复给关注用户,用户单击后,弹出授权界面,如图 5-2 所示。

图 5-2 授权界面
(3)回调页面得到的链接如下,回调 URL 中将包含参数 code。
https://www.wechatadd.com.php?code=00b788e3b42043c8459a57a8d8ab5d9f&state=1
或者如下 URL:
https://www.wechatadd.com.php?userid=oc7tbuPA9BgUCLADib5nB3k2KWWg&code=00b788e3b42043c8459a57a8d8ab5d9f&state=1
(4)再使用 code 换取 oauth2 的 OAu access_token。
URL 如下:
https://www.wechatadd.com;secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=00b788e3b42043c8459a57a8d8ab5d9f&grant_type=au thorization_code
获得如下 OAu access_token:
1. { 2. "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2 CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN --2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw", 3. "expires_in": 7200, 4. "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_ KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAw Zksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A", 5. "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc", 6. "scope": "snsapi_userinfo," 7. }
(5)再使用 OAu access_token 获取用户信息。
URL 如下:
https://www.wechatadd.com d1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dn vU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9Bhvz wPj5A-vTYAX3GLc
返回结果如下:
1. { 2. 「openid」: 「oLVPpjqs9BhvzwPj5A-vTYAX3GLc」, 3. 「nickname」: 「熊猫宝宝」, 4. 「sex」: 1, 5. 「language」: 「zh_CN」, 6. 「city」: 「深圳」, 7. 「province」: 「广东」, 8. 「country」: 「中国」, 9. 「headimgurl」: 「https://www.wechatadd.com DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qp BBg18/0」, 10. 「privilege」: [] 11. }
这样就可以完整地获取用户信息。
3. 通过 OAuth 2.0 方式不弹出授权页面获得用户基本信息
(1)配置回调域名,如图 5-3 所示。

图 5-3 配置回调域名
(2)构造请求 URL。
https://www.wechatadd.com;redirect_uri=https://www.wechatadd.com.php&response_t ype=code&scope=snsapi_base&state=1#wechat_re direct
页面 URL 中的 scope=snsapi_base 表示应用授权作用域为不弹出授权页面,直接跳转,只获取用户 OpenID。
(3)返回回调页面。
https://www.wechatadd.com;state=1
通过此链接可以获得 code。
(4)再使用 code 获取 OpenID。
URL 如下:
https://www.wechatadd.com;secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=02a9bed29b2185a9f0ed3a48fe56e700&grant_type=aut horization_code
返回结果如下:
1. { 2. "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2c BNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5Y6vey3dgDtFki5 C8r6D0E6mSVxxtb8BjLMhb-mCyT_Yg", 3. "expires_in": 7200, 4. "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2 cBNUKQQvj-oJ9VmO-0Z-_izfnSAX_s0aqDsYkW4s8W5dLZ4iyNj5YBkF0ZUH1Ew8Iqea 6x_itq13sYDqP1D7ieaDy9u2AHHw", 5. "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc", 6. "scope": "snsapi_base" 7. }
(5)然后获取 App access_token。
https://www.wechatadd.com;appid=APPID&secre t=APPSECRET
返回结果如下:
1. { 2. "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l- Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy- rz2y441W9qgfnmNtIZWSjSQ", 3. "expires_in": 7200 4. }
(6)再使用 App access_token 获取 OpenID 的详细信息。
https://www.wechatadd.com;openid=OPENID
返回结果如下:
1. { 2. 「subscribe」: 1, 3. 「openid」: 「oLVPpjqs2BhvzwPj5A-vTYAX4GLc」, 4. 「nickname」: 「熊猫宝宝」, 5. 「sex」: 1, 6. 「language」: 「zh_CN」, 7. 「city」: 「深圳」, 8. 「province」: 「广东」, 9. 「country」: 「中国」, 10. 「headimgurl」: 「https://www.wechatadd.com PmibRkIs5K2f1tUQ7lFjC63pYHaXGxNDgMzjGDEuvzYZbFOqtUXaxSdoZG6iane5ko9 H30krIbzGv/0」, 11. 「subscribe_time」: 1386160805 12. }
此方法也可成功获得用户基本信息。这种方法适合已经有 OAuth 2.0 网页授权的服务号在网页中使用,且不会弹出「微信登录」页面,减少给用户的打扰。
获取用户列表公众号可通过获取用户列表接口来获取账号的关注者列表。关注者列表由一串 OpenID(加密后的微信号,每个用户对公众号的 OpenID 是唯一的)组成。一次拉取调用最多拉取 10 000 个关注者的 OpenID,可以通过多次拉取的方式来满足需求。
接口调用请求说明如下。
HTTP 请求方式:GET(使用 HTTPS)。
https://www.wechatadd.com;next_openid=NEXT_OPENID
参数说明如表 5-4 所示。
表 5-4 获取用户列表请求参数说明
参数 | 是否必须 | 说明 |
access_token | 是 | 调用接口凭证 |
next_openid | 是 | 第一个拉取的 OpenID,不填,则默认从头开始拉取 |
正确时返回的 JSON 数据包如下:
1. { 2. "total":2, 3. "count":2, 4. "data":{"openid":["","OPENID1","OPENID2"]}, 5. "next_openid":"NEXT_OPENID" 6. }
参数说明如表 5-5 所示。
表 5-5 正确返回用户列表参数说明

版权保护: 本文由 李斯特 原创,转载请保留链接: https://www.wechatadd.com/artdet/9551
阅读推荐
更多...- 优秀微信推荐,航空公司的微信运营之道 2023-07-09
- 罗振宇为何要给「华为云」千万订单? 2023-05-21
- 你也能快速成交——胜算大局由你操控--销售的关键在哪里? 2023-03-08
- 控制力:抓住机会,主动为销售结果负责 2023-03-04
- 微信创业中易犯的致命小错误,刷屏式宣传讨人嫌 2023-07-12
- 吸粉引流:千方百计“引”“留”用户,轻引流法,利用平台回复与分组 2023-05-30
- 论辩交锋——异议矛盾巧化解,提升销售业绩 2023-03-13
- 黄太纸:绿色环保点亮「黄色诱惑」,奔跑中的一匹行业黑马 2022-07-16
- 小处签约法「销售技巧」 2023-03-02
- 你的眼神和动作代表了你的心——销售技巧 2023-03-04
- 产品打磨,产品打磨(下) 2023-07-16
- 淘宝开店其实很简单 2023-10-08
- 博恩·崔西:销售是从关心人开始的 2023-03-24
- 莫名失败:犯忌,浅薄,误事,你中了哪个?[销售秘籍建议收藏] 2023-05-22
- 羊肉销售大神,让您的销售业绩高速增长! 2023-05-20
- 从零开始——新媒体运营快速实战入门,做好认证提高权威 2023-05-30
- 三个问题玩转商业模式画布 2023-07-16
- 销售人员要做时间的主人 2023-03-04