C# 微信开发-----微信会员卡(三)激活会员卡

时间:2021-01-31 23:23:29

在会员领取了会员卡之后需要做 一个跳转性激活,模式请看下图:

C# 微信开发-----微信会员卡(三)激活会员卡

在创建会员卡的时候需要配置下这个参数的值:

C# 微信开发-----微信会员卡(三)激活会员卡

 

 memberActivate.aspx页面代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="memberActivate.aspx.cs" Inherits="ChainStock.mobile.member.memberActivate" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>激活会员卡</title>
    <script src="js/jquery.min.js" type="text/javascript"></script>
    <%--<script src="scripts/bootstrap.min.js" type="text/javascript"></script>--%>
    <link href="css/bootstrap.min.css" rel="stylesheet" />
    <style type="text/css">
        .no-padding {
            padding: 0px;
        }

        .no-margin {
            margin: 0px;
        }

        .btn_active {
            background-color: #019a01;
            width: 100%;
            padding: 7px 0px;
            color: white;
            border: 1px solid #019a01;
        }

        .btn_return {
            background-color: #f8f8f8;
            width: 100%;
            padding: 7px 0px;
            color: black;
            border: 1px solid #e6e6e6;
        }
    </style>
    <script type="text/javascript">
        $(function () {
            $(".btn_return").bind("click", function () {
                event.preventDefault();
                window.history.back();
            })
        });
    </script>
</head>
<body style="background-color: #f2f2f2;" class="no-padding no-margin">
    <form id="form1" runat="server">
        <div class="container no-padding">
            <br />
            <div class="col-xs-12">
                <div class="col-xs-12">
                    <label>请确定以下信息:</label>

                </div>
            </div>
            <div class="clearfix"></div>
            <br />
            <div style="background-color: white; padding: 30px 0px; border-bottom: 1px solid #dbdbdb; border-top: 1px solid #dbdbdb;">
                <div class="col-xs-12">
                    <div class="col-xs-3">
                        用户名
                    </div>
                    <div class="col-xs-9 no-padding text-left" id="divMemName" runat="server"></div>
                    <div class="clearfix"></div>
                </div>
                <div class="col-xs-12" style="padding-top: 10px;">
                    <div class="col-xs-3">
                        手机号
                    </div>
                    <div class="col-xs-9 no-padding text-left" id="divMemMobile" runat="server">
                    </div>
                    <div class="clearfix"></div>
                </div>
                <div class="clearfix"></div>
            </div>
            <br />

            <div class="col-xs-12 no-padding">
                <div class="col-xs-12 text-center">
                    <input type="button" class="btn btn-sm btn_active" value="激活会员卡" id="btnActiveMem" />
                    <input type="hidden" id="hd_MemMobile" value="" runat="server" />
                    <input type="hidden" id="hd_CardCode" value="" runat="server" />
                    <input type="hidden" id="hd_CardId" value="" runat="server" />
                </div>

                <div class="col-xs-12 text-center">
                    <br />
                    <input type="button" class="btn btn-sm btn_return" value="返 回" />
                </div>
                <div class="col-xs-12 ">
                    <h6 style="color: red;">注:激活后不可修改上面的信息</h6>
                </div>

                <div class="clearfix"></div>
            </div>
        </div>
    </form>

    <script type="text/javascript" src="scripts/jquery-2.1.4.min.js"></script>
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
    <script type="text/javascript">
        $(function () {
            //激活会员卡
            $("#btnActiveMem").click(function () {
                $.ajax({
                    type: "GET",
                    url: "../../Service/AjaxService.ashx?Method=Wx_ActivateCard",
                    data: {
                        memMobile: $("#hd_MemMobile").val(),
                        cardCode: $("#hd_CardCode").val(),
                        cardId: $("#hd_CardId").val()
                    },
                    dataType: "text",
                    success: function (result) {
                        if (result != null && result != "") {
                            switch (result) {
                                case "0":
                                    alert("系统错误,请稍后再试");
                                    break;
                                case "-1":
                                    alert("系统异常,请联系管理员");
                                    break;
                                case "-2":
                                    alert("您还不是会员,激活失败");
                                    break;
                                default:
                                    alert("激活成功");
                                    wx.closeWindow();//这一步就是会员激活了之后就自动跳转到会员卡详细页面
                            }
                        }
                    }
                });
            });
        })
    </script>
</body>
</html>

后台代码:

using Chain.Wechat;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ChainStock.mobile.member
{
    public partial class memberActivate : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            BindData();

        }
        void BindData()
        {
            string code = "";
            string openid = "";
            string access_token = "";
            string strEncrypt_code = "";
            string tick_code = "";
            string strActivate_ticket = "";
            string cardId = "";

            try
            {
                if (!string.IsNullOrEmpty(Request.QueryString["encrypt_code"]))
                {
                    strEncrypt_code = Request.QueryString["encrypt_code"].ToString();
                }
                if (!string.IsNullOrEmpty(Request.QueryString["card_id"]))
                {
                    cardId = Request.QueryString["card_id"].ToString();
                    hd_CardId.Value = cardId;
                }
                string getAuthorize = GetAuthorize();
                if (getAuthorize != "")
                {
                    getAuthorize = "[" + getAuthorize + "]";

                    Newtonsoft.Json.Linq.JArray javascript = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(getAuthorize);
                    Newtonsoft.Json.Linq.JObject obj = (Newtonsoft.Json.Linq.JObject)javascript[0];

                    if (obj["access_token"] != null && obj["access_token"].ToString() != "")
                    {
                        access_token = obj["access_token"].ToString();//用户OpenID             
                    }
                }
                if (!string.IsNullOrEmpty(access_token))
                {
                    if (!string.IsNullOrEmpty(Request.QueryString["encrypt_code"]))
                    {
                        strEncrypt_code = Request.QueryString["encrypt_code"].ToString();
                        string postUrl = "https://api.weixin.qq.com/card/code/decrypt?access_token=" + access_token;
                        string postDate = "{\"encrypt_code\":\"" + strEncrypt_code + "\"}";

                        string strResult = PostWebRequest(postUrl, postDate);
                        strResult = "[" + strResult + "]";
                        Newtonsoft.Json.Linq.JArray codeArray = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(strResult);
                        Newtonsoft.Json.Linq.JObject objResult = (Newtonsoft.Json.Linq.JObject)codeArray[0];
                        if (objResult["errmsg"].ToString() == "ok")
                        {
                            code = objResult["code"].ToString();
                            hd_CardCode.Value = code;
                            if (!string.IsNullOrEmpty(Request["activate_ticket"]))
                            {
                                strActivate_ticket = Request["activate_ticket"].ToString();
                            }

                            if (!string.IsNullOrEmpty(strActivate_ticket))
                            {
                                string ticketPostUrl = "https://api.weixin.qq.com/card/membercard/activatetempinfo/get?access_token=" + access_token;
                                string ticketPostData = "{ \"activate_ticket\" : \"" + strActivate_ticket + "\"}";
                                string userInfoResult = PostWebRequest(ticketPostUrl, ticketPostData);
                                userInfoResult = "[" + userInfoResult + "]";

                                Newtonsoft.Json.Linq.JArray userInfoArray = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(userInfoResult);
                                Newtonsoft.Json.Linq.JObject objUserInfo = (Newtonsoft.Json.Linq.JObject)userInfoArray[0];
                                if (objUserInfo["errmsg"].ToString() == "ok")
                                {
                                    string userMobile = objUserInfo["info"]["common_field_list"][0]["value"].ToString();
                                    string userName = objUserInfo["info"]["common_field_list"][1]["value"].ToString();
                                    if (!string.IsNullOrEmpty(userMobile))
                                    {
                                        hd_MemMobile.Value = userMobile;
                                        divMemMobile.InnerText = userMobile;
                                        divMemName.InnerText = userName;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                PubFunction.LogError("微信激活会员授权异常:" + ex);
            }
        }


        //通过code换取网页授权access_token
        public string GetAuthorize()
        {
            //PubFunction.curParameter.strWeiXinAppID = "wxcb014df3a2583811";
            //PubFunction.curParameter.strWeiXinAppSecret = "1fb18946950b112cd79103a7b1f9249b";
            if (PubFunction.curParameter.strWeiXinAppID != null && PubFunction.curParameter.strWeiXinAppSecret != null)
            {
                string templateUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
                templateUrl = string.Format(templateUrl, PubFunction.curParameter.strWeiXinAppID, PubFunction.curParameter.strWeiXinAppSecret);
                HttpRequestHelper hrh = new HttpRequestHelper();
                return hrh.Reqeust(templateUrl);
            }
            else
            {
                return "";
            }
        }

        /// <summary>
        /// 发送Post请求到微信端
        /// </summary>
        /// <param name="postUrl">请求的路径</param>
        /// <param name="paramData">发送的数据</param>
        /// <returns></returns>
        public string PostWebRequest(string postUrl, string paramData)
        {
            string ret = string.Empty;
            try
            {
                byte[] byteArray = Encoding.UTF8.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
                webReq.Method = "POST";
                webReq.ContentType = "application/json";

                webReq.ContentLength = byteArray.Length;
                Stream newStream = webReq.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                newStream.Close();
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                ret = sr.ReadToEnd();
                sr.Close();
                response.Close();
                newStream.Close();
            }
            catch (Exception ex)
            {
                PubFunction.LogError(ex);
            }
            return ret;

        }
    }
}

激活时我使用了一般处理程序来激活的代码如下:这个是根据我的系统做了一个判断,是我系统中的会员才能激活,否则不能激活

#region 跳转式激活会员卡 参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283   6.6.2
        public void Wx_ActivateCard()
        {
            int flag = 0;
            string access_token = "";
            try
            {
                string strMemMobile = !string.IsNullOrEmpty(Request["memMobile"]) ? Request["memMobile"].ToString() : "";//手机号
                string strCardCode = !string.IsNullOrEmpty(Request["cardCode"]) ? Request["cardCode"].ToString() : "";//卡Code
                string strCardId = !string.IsNullOrEmpty(Request["cardId"]) ? Request["cardId"].ToString() : "";//卡ID
                if (!string.IsNullOrEmpty(strMemMobile))
                {
                    Chain.BLL.Mem bllMem = new Chain.BLL.Mem();
                    DataTable dtMem = bllMem.GetList(" MemMobile='" + strMemMobile + "' ").Tables[0];
                    if (dtMem.Rows.Count > 0)//执行激活(只有系统中的会员才能激活)
                    {
                        string getAuthorize = GetAuthorize();
                        if (getAuthorize != "")
                        {
                            getAuthorize = "[" + getAuthorize + "]";

                            Newtonsoft.Json.Linq.JArray javascript = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(getAuthorize);
                            Newtonsoft.Json.Linq.JObject obj = (Newtonsoft.Json.Linq.JObject)javascript[0];

                            if (obj["access_token"] != null && obj["access_token"].ToString() != "")
                            {
                                access_token = obj["access_token"].ToString();
                            }
                            if (!string.IsNullOrEmpty(strCardCode) && !string.IsNullOrEmpty(strCardId))
                            {
                                string postData = "{";
                                postData += "\"membership_number\": \"" + strMemMobile + "\",";
                                postData += "\"code\": \"" + strCardCode + "\",";
                                postData += "\"card_id\": \"" + strCardId + "\"";
                                postData += "}";
                                string postUrl = "https://api.weixin.qq.com/card/membercard/activate?access_token=" + access_token;
                                string result = PostWebRequest(postUrl, postData);

                                if (!string.IsNullOrEmpty(result))
                                {
                                    result = "[" + result + "]";
                                    Newtonsoft.Json.Linq.JArray cardResult = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(result);
                                    Newtonsoft.Json.Linq.JObject cardObj = (Newtonsoft.Json.Linq.JObject)cardResult[0];

                                    if (cardObj["errmsg"] != null && cardObj["errmsg"].ToString() != "")
                                    {
                                        if (cardObj["errmsg"].ToString() == "ok")
                                        {
                                            flag = 1;
                                        }
                                        else
                                        {
                                            flag = -1;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else//禁止激活 
                    {
                        flag = -2;
                    }
                }
                else
                {
                    flag = -1;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                flag = -1;
            }
            Context.Response.Write(flag);
        }
        #endregion