Home WeChat Applet WeChat Development Sample code for user group management in asp.net WeChat development

Sample code for user group management in asp.net WeChat development

Mar 10, 2017 pm 02:42 PM
asp.net WeChat development

This article mainly introduces the relevant content about user group management in asp.net WeChat development. Friends in need can refer to the following

The previous article has explained how to create new user groups and move users to groups. Function, this chapter mainly explains how to modify the group name and delete the group

Sample code for user group management in asp.net WeChat development

#Go directly to the code, without further ado, get the entity class needed to get the group list

 /// <summary>
 /// 微信分组类
 /// </summary>
 public class WxGroupsInfo
 {
  public string Group_ID { get; set; }//分组编号
  public string Group_Name { get; set; }//分组名称
  public string Group_Count { get; set; }//分组人数
 }
Copy after login

Front desk code:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
  <link href="css/style.css" rel="Stylesheet" type="text/css" />
 <style type="text/css">
   .inputstyle { height:35px; line-height:35px; text-indent:5px; width:350px;background-image:url(&#39;images/inputbg.gif&#39;); background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df;margin:15px auto 15px auto;
  }
  a:hover { cursor:pointer;
  }
  .g_title { width:100%; border-bottom:2px solid #ced9df;font-size:20px; font-weight:bold; text-align:left; text-indent:5px; height:40px; line-height:40px;
  }
   th { height:35px;background-image:url(&#39;images/th.gif&#39;); background-repeat:repeat-x;
  }
   tr { height:30px;
   }
  #shownewgroup { width:300px; height:200px; background-color:white;z-index:9999; border:2px solid #DDD; top:40%; left:40%; background-color:#fff; position:fixed;margin:-100px auto auto -100px; display:none;
  }
  #shownewgroupzhezhaoceng { height:200%; width:200%; left:0px; top:0px;position:fixed; z-index:9998; background:rgb(50,50,50);background:rgba(0,0,0,0.5); display:none;
  }
  .closeLogin { height:30px; border-bottom:2px solid #31bb34; text-align:right; line-height:30px; font-size:14px; font-weight:bold;
  }
  a:hover { cursor:pointer;
  }
   .inputstyle22 { height:35px; line-height:35px; text-indent:5px; width:280px;background-image:url(&#39;images/inputbg.gif&#39;); background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; float:left; margin:auto 5px auto 5px;
  }
 </style>
  <script src="../js/jquery-1.7.1.min.js" type="text/javascript"></script>
  <script type="text/javascript">

       //修改分组名称调用的函数
   function EditRoster(PayNo,name) {

    //alert(PayNo+":"+name);
    var url = &#39;****.aspx?id=&#39; + PayNo+"&name="+name;//转向网页的地址; 
    var name = &#39;add&#39;;       //网页名称,可为空; 
    var iWidth = 600;       //弹出窗口的宽度; 
    var iHeight = 300;       //弹出窗口的高度; 
    //获得窗口的垂直位置 
    var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
    //获得窗口的水平位置 
    var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
    window.open(url, name, &#39;height=&#39; + iHeight + &#39;,innerHeight=&#39; + iHeight + &#39;,width=&#39; + iWidth + &#39;,innerWidth=&#39; + iWidth + &#39;,top=&#39; + iTop + &#39;,left=&#39; + iLeft + &#39;,status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no&#39;);
   }

   $(document).ready(function () {

    $(".newGroups").click(function () {
     $("#shownewgroupzhezhaoceng").show();
     $("#shownewgroup").show();
    }),
   $(&#39;.closeloginpage&#39;).click(function () {
    $("#shownewgroupzhezhaoceng").hide();
    $("#shownewgroup").hide();
   })
   })
 </script>
</head>
<body>
 <form id="form1" runat="server">
  <p class="place">
  <span>位置:</span>
  <ul class="placeul">
   <li><a href="WelCome.aspx" target="rightFrame">首页</a></li>
   <li>微信管理</li>
   <li>德桥员工服务中心----分组管理</li>
  </ul>
  </p>
  <p class="g_title">分组管理</p>
   <p id="shownewgroup">
     <p class="closeLogin"><a class="closeloginpage"><span style="float:left; color:#08a5e0; font-size:18px; text-indent:5px;">新建分组</span>关闭</a>  </p>
    <p style="font-size:12px; height:40px; color:red; line-height:40px;">  30字符以内</p>
    <input type="text" id="txtgroupsName" name="txtgroupsName" class="inputstyle22" maxlength="30" runat="server" value="分组名称" onfocus="if(value==defaultValue){value=&#39;&#39;;this.style.color=&#39;#000&#39;}" onblur="if(!value){value=defaultValue;this.style.color=&#39;#999&#39;}" style="color:#999"/>
   <asp:LinkButton ID="LinkBtnCreateGroup" runat="server" OnClick="LinkBtnCreateGroup_Click"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; margin-top:20px; margin-left:5px; text-align:center;color:#fff;"> 确定创建</p></asp:LinkButton>
     </p>
    <p id="shownewgroupzhezhaoceng"></p>
  <table style="width:1124px; margin:10px auto 10px auto; border:1px solid #ecd9df;text-align:center;">
   <asp:Repeater ID="RepeaterGroupList" runat="server" OnItemCommand="RepeaterGroupList_ItemCommand" OnItemDataBound="RepeaterGroupList_ItemDataBound">
    <HeaderTemplate>
     <tr>
      <th>序号</th>
      <th>ID编号</th>
      <th>分组名称</th>
      <th>分组人数</th>
      <th>操作</th>
     </tr>
    </HeaderTemplate>
    <ItemTemplate>
     <tr style=&#39;background-color: <%#(Container.ItemIndex%2==0)?"#fff":"#ced9ff"%>&#39;>
      <td><asp:Label ID="lbXuHao" runat="server" Text=""></asp:Label></td>
      <td><%# Eval("Group_ID") %></td>
      <td><%# Eval("Group_Name") %></td>
      <td><%# Eval("Group_Count") %></td>
      <td>
        <a onclick="EditRoster(&#39;<%# Eval("Group_ID") %>&#39;,&#39;<%# Eval("Group_Name") %>&#39;);">修改分组名称</a> 
         <asp:LinkButton ID="LinkBtnDeleteGroup" runat="server" CommandName="DeleteGroups" CommandArgument=&#39;<%# Eval("Group_ID") %>&#39; >删除分组</asp:LinkButton>
      </td>
     </tr>
    </ItemTemplate>
   </asp:Repeater>
  </table>
  <a class="newGroups"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; margin:10px auto 10px 28px; font-weight:bold;float:left; text-align:center;color:#fff;"> ┼ 新建分组</p></a>
 </form>
</body>
</html>
Copy after login

The background code is as follows:

protected void Page_Load(object sender, EventArgs e)
  {
   if(!Page.IsPostBack)
   {
    BindGroupList();
    this.DataBind();
   }
  }

  private void BindGroupList()
  {
   WeiXinServer wxs = new WeiXinServer();

   ///从缓存读取accesstoken
   string Access_token = Cache["Access_token"] as string;

   if (Access_token == null)
   {
    //如果为空,重新获取
    Access_token = wxs.GetAccessToken();

    //设置缓存的数据7000秒后过期
    Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
   }

   string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);

   string jsonres = "";

   string content = Cache["AllGroups_content"] as string;

   if (content == null)
   {
    jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento;

    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);
    myRequest.Method = "GET";
    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
    StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
    content = reader.ReadToEnd();
    reader.Close();

    //设置缓存的数据7000秒后过期
    Cache.Insert("AllGroups_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
   }

   //使用前需要引用Newtonsoft.json.dll文件
   JObject jsonObj = JObject.Parse(content);


   int groupsnum = jsonObj["groups"].Count();


   List<WxGroupsInfo> wxgrouplist = new List<WxGroupsInfo>();
   
   for (int i = 0; i < groupsnum; i++)
   {
    WxGroupsInfo wginfo = new WxGroupsInfo();

    wginfo.Group_ID = jsonObj["groups"][i]["id"].ToString();

    wginfo.Group_Name = jsonObj["groups"][i]["name"].ToString();

    wginfo.Group_Count = jsonObj["groups"][i]["count"].ToString();

    wxgrouplist.Add(wginfo);
   }

   this.RepeaterGroupList.DataSource = wxgrouplist;
   this.RepeaterGroupList.DataBind();
  }
  /// <summary>
  /// 绑定事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void RepeaterGroupList_ItemDataBound(object sender, RepeaterItemEventArgs e)
  {
   if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
   {
    Label lbXuHao = e.Item.FindControl("lbXuHao") as Label;

    int num = 1;

    lbXuHao.Text = num.ToString();

    for (int i = 0; i < this.RepeaterGroupList.Items.Count;i++ )
    {
     num += 1;
     lbXuHao.Text = num.ToString();
    }


    LinkButton LinkBtnDeleteGroup = e.Item.FindControl("LinkBtnDeleteGroup") as LinkButton;

    LinkBtnDeleteGroup.Attributes.Add("OnClick", "return confirm(&#39;您确定要删除该分组?删除后该分组内的人员即将恢复到默认分组!&#39;)");

   }
  }
  /// <summary>
  /// 执行事件
  /// </summary>
  /// <param name="source"></param>
  /// <param name="e"></param>
  protected void RepeaterGroupList_ItemCommand(object source, RepeaterCommandEventArgs e)
  {

   //ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;删除接口已关闭!&#39;);location=&#39;WxGroupManageList.aspx&#39;;", true);
   if (e.CommandName == "DeleteGroups")
   {
    WeiXinServer wxs = new WeiXinServer();
    string res = "";

    ///从缓存读取accesstoken
    string Access_token = Cache["Access_token"] as string;

    if (Access_token == null)
    {
     //如果为空,重新获取
     Access_token = wxs.GetAccessToken();

     //设置缓存的数据7000秒后过期
     Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
    }

    string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


    string posturl = "https://api.weixin.qq.com/cgi-bin/groups/delete?access_token=" + Access_tokento;


    //POST数据例子: POST数据例子:{"group":{"id":108}}

    string groupid = e.CommandArgument.ToString();

    string postData = "{\"group\":{\"id\":\"" + groupid.ToString() + "\"}}";

    res = wxs.GetPage(posturl, postData);

    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;删除成功!由于缓存问题,您可能需要重新登录才能看到效果!&#39;);location=&#39;WxGroupManageList.aspx&#39;;", true);
   }
  }
  /// <summary>
  /// 创建分组
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void LinkBtnCreateGroup_Click(object sender, EventArgs e)
  {
   if (this.txtgroupsName.Value.ToString().Equals("分组名称"))
   {
    ////
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;不能为空!&#39;)", true);
    this.txtgroupsName.Focus();
    return;
   }


   WeiXinServer wxs = new WeiXinServer();
   string res = "";

   ///从缓存读取accesstoken
   string Access_token = Cache["Access_token"] as string;

   if (Access_token == null)
   {
    //如果为空,重新获取
    Access_token = wxs.GetAccessToken();

    //设置缓存的数据7000秒后过期
    Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
   }

   string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


   string posturl = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token=" + Access_tokento;


   string postData = "{\"group\":{\"name\":\"" + this.txtgroupsName.Value.ToString().Trim() + "\"}}";


   res = wxs.GetPage(posturl, postData);


   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;创建成功!如未显示,请退出重新登录即可!&#39;);location=&#39;WxGroupManageList.aspx&#39;;", true);
  }
Copy after login

##Page to modify the group name

Sample code for user group management in asp.net WeChat development

Front code:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <title></title>
 <style type="text/css">
  .inputstyle { height:35px; line-height:35px; text-indent:5px; width:280px;background-image:url(&#39;images/inputbg.gif&#39;); background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; float:left; margin:auto 5px auto 5px;
  }
 </style>
</head>
<body>
 <form id="form1" runat="server">
  <table border="1" style=" width:500px; border-collapse:collapse; margin:20px auto 20px auto; line-height:40px;">
   <tr>
    <td style="text-align:right;">分组编号:</td>
    <td> <asp:TextBox ID="txtGroupId" CssClass="inputstyle" Enabled="false" runat="server"></asp:TextBox></td>
   </tr>
   <tr>
    <td style="text-align:right;">分组名称:</td>
    <td> 
     <asp:TextBox ID="txtGroupName" CssClass="inputstyle" runat="server"></asp:TextBox>
    </td>
   </tr>
   <tr>
    <td></td>
    <td>
      <asp:LinkButton ID="LinkBtnSet" runat="server" OnClick="LinkBtnSet_Click" ><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; float:left; font-weight:bold;text-align:center;color:#fff;"> 设 置</p></asp:LinkButton></td>
   </tr>
  </table>
 </form>
</body>
</html>
Copy after login

Backend code:

 protected void Page_Load(object sender, EventArgs e)
  {
   if(!Page.IsPostBack)
   {
    if (Request.QueryString["id"] != null)
    {
     string group_id = Request.QueryString["id"].ToString();
     string group_name = Request.QueryString["name"].ToString();
     this.txtGroupId.Text = group_id.ToString();
     this.txtGroupName.Text = group_name.ToString();
     this.txtGroupName.Focus();
    }
   }
  }
  /// <summary>
  /// 设置
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void LinkBtnSet_Click(object sender, EventArgs e)
  {
   if(String.IsNullOrWhiteSpace(this.txtGroupName.Text.ToString().Trim()))
   {
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;不能为空!&#39;);", true);
    this.txtGroupName.Focus();
    return;
   }
   if (this.txtGroupName.Text.ToString().Trim().Length>30)
   {
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;组名称应在30个字符之内!&#39;);", true);
    this.txtGroupName.Focus();
    return;
   }

   WeiXinServer wxs = new WeiXinServer();
   string res = "";

   ///从缓存读取accesstoken
   string Access_token = Cache["Access_token"] as string;

   if (Access_token == null)
   {
    //如果为空,重新获取
    Access_token = wxs.GetAccessToken();

    //设置缓存的数据7000秒后过期
    Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
   }

   string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);


   string posturl = "https://api.weixin.qq.com/cgi-bin/groups/update?access_token=" + Access_tokento;


   //POST数据例子:POST数据例子:{"group":{"id":108,"name":"test2_modify2"}}


   //string postData = "{\"group\":{\"name\":\"" + this.txtgroupsName.Value.ToString().Trim() + "\"}}";
   string postData = "{\"group\":{\"id\":\"" + txtGroupId.Text.ToString() +"\",\"name\":\""+this.txtGroupName.Text.ToString()+"\"}}";


   res = wxs.GetPage(posturl, postData);


   //使用前需药引用Newtonsoft.json.dll文件
   JObject jsonObj = JObject.Parse(res);

   ///获取返回结果的正确|true|false,
   string isright = jsonObj["errcode"].ToString();//0
   string istrueorfalse = jsonObj["errmsg"].ToString();//ok
   if (isright.Equals("0") && istrueorfalse.Equals("ok"))
   {
           ///修改成功之后,刷新父窗体,关闭本页
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;修改成功!如未正常显示,属缓存问题,请重新登录即可!&#39;);window.opener.location.reload();this.close();", true);
   }
   else
   {
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;修改失败!&#39;);this.close();", true);
   }


  }
Copy after login

The above is all the core code for user group management. It is for reference only. I hope it will be helpful to everyone's study.

The above is the detailed content of Sample code for user group management in asp.net WeChat development. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP WeChat development: How to implement message encryption and decryption PHP WeChat development: How to implement message encryption and decryption May 13, 2023 am 11:40 AM

PHP is an open source scripting language that is widely used in web development and server-side programming, especially in WeChat development. Today, more and more companies and developers are starting to use PHP for WeChat development because it has become a truly easy-to-learn and easy-to-use development language. In WeChat development, message encryption and decryption are a very important issue because they involve data security. For messages without encryption and decryption methods, hackers can easily obtain the data, posing a threat to users.

Using PHP to develop WeChat mass messaging tools Using PHP to develop WeChat mass messaging tools May 13, 2023 pm 05:00 PM

With the popularity of WeChat, more and more companies are beginning to use it as a marketing tool. The WeChat group messaging function is one of the important means for enterprises to conduct WeChat marketing. However, if you only rely on manual sending, it is an extremely time-consuming and laborious task for marketers. Therefore, it is particularly important to develop a WeChat mass messaging tool. This article will introduce how to use PHP to develop WeChat mass messaging tools. 1. Preparation work To develop WeChat mass messaging tools, we need to master the following technical points: Basic knowledge of PHP WeChat public platform development Development tools: Sub

PHP WeChat development: How to implement user tag management PHP WeChat development: How to implement user tag management May 13, 2023 pm 04:31 PM

In the development of WeChat public accounts, user tag management is a very important function, which allows developers to better understand and manage their users. This article will introduce how to use PHP to implement the WeChat user tag management function. 1. Obtain the openid of the WeChat user. Before using the WeChat user tag management function, we first need to obtain the user's openid. In the development of WeChat public accounts, it is a common practice to obtain openid through user authorization. After the user authorization is completed, we can obtain the user through the following code

PHP WeChat development: How to implement group message sending records PHP WeChat development: How to implement group message sending records May 13, 2023 pm 04:31 PM

As WeChat becomes an increasingly important communication tool in people's lives, its agile messaging function is quickly favored by a large number of enterprises and individuals. For enterprises, developing WeChat into a marketing platform has become a trend, and the importance of WeChat development has gradually become more prominent. Among them, the group sending function is even more widely used. So, as a PHP programmer, how to implement group message sending records? The following will give you a brief introduction. 1. Understand the development knowledge related to WeChat public accounts. Before understanding how to implement group message sending records, I

PHP WeChat development: How to implement customer service chat window management PHP WeChat development: How to implement customer service chat window management May 13, 2023 pm 05:51 PM

WeChat is currently one of the social platforms with the largest user base in the world. With the popularity of mobile Internet, more and more companies are beginning to realize the importance of WeChat marketing. When conducting WeChat marketing, customer service is a crucial part. In order to better manage the customer service chat window, we can use PHP language for WeChat development. 1. Introduction to PHP WeChat development PHP is an open source server-side scripting language that is widely used in the field of Web development. Combined with the development interface provided by WeChat public platform, we can use PHP language to conduct WeChat

PHP WeChat development: How to implement voting function PHP WeChat development: How to implement voting function May 14, 2023 am 11:21 AM

In the development of WeChat public accounts, the voting function is often used. The voting function is a great way for users to quickly participate in interactions, and it is also an important tool for holding events and surveying opinions. This article will introduce you how to use PHP to implement WeChat voting function. Obtain the authorization of the WeChat official account. First, you need to obtain the authorization of the WeChat official account. On the WeChat public platform, you need to configure the API address of the WeChat public account, the official account, and the token corresponding to the public account. In the process of our development using PHP language, we need to use the PH officially provided by WeChat

Steps to implement WeChat public account development using PHP Steps to implement WeChat public account development using PHP Jun 27, 2023 pm 12:26 PM

How to use PHP to develop WeChat public accounts WeChat public accounts have become an important channel for promotion and interaction for many companies, and PHP, as a commonly used Web language, can also be used to develop WeChat public accounts. This article will introduce the specific steps to use PHP to develop WeChat public accounts. Step 1: Obtain the developer account of the WeChat official account. Before starting the development of the WeChat official account, you need to apply for a developer account of the WeChat official account. For the specific registration process, please refer to the official website of WeChat public platform

How to use PHP for WeChat development? How to use PHP for WeChat development? May 21, 2023 am 08:37 AM

With the development of the Internet and mobile smart devices, WeChat has become an indispensable part of the social and marketing fields. In this increasingly digital era, how to use PHP for WeChat development has become the focus of many developers. This article mainly introduces the relevant knowledge points on how to use PHP for WeChat development, as well as some of the tips and precautions. 1. Development environment preparation Before developing WeChat, you first need to prepare the corresponding development environment. Specifically, you need to install the PHP operating environment and the WeChat public platform

See all articles