實際案例: 獲取臨時票証 (JsApi Ticket)

專案中選用大名鼎鼎的 Senparc 微信開發套件

獲取臨時票證處理常式的程式碼 (GetgVXinInfo.ashx)

using Senparc.Weixin;
using Senparc.Weixin.MP;
using Senparc.Weixin.MP.Entities;
using Senparc.Weixin.MP.CommonAPIs;
using ShouJia.BO;
using ShouJia.Facades;
using ShouJia.Debugger;
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web;

namespace ShouJia.VXinWeb.User.ashx
{
    /// <summary>
    /// VXinInfo 的摘要描述
    /// </summary>
    public class GetVXinInfo : IHttpHandler
    {

        public void ProcessRequest(HttpContext c)
        {
            //string GarageID = c.Request.QueryString["xlc_id"];
            string GarageID = "43";
            string Url = c.Request.UrlReferrer.ToString();

            WebLogs.Debug("Start for GetVXinInfo ", "Start");
            WebLogs.Debug("Get GarageID", GarageID);
            WebLogs.Debug("Get URL", Url);

            SendVXinInfo(GarageID, Url, c);

            WebLogs.Debug("End for GetVXinInfo", "End");
        }

        private void SendVXinInfo(string garageID, string url, HttpContext c)
        {
            VXConfigInfo vxi = WeixinBehaviors.GetVXinInfoByGarage(int.Parse(garageID));

            AccessTokenContainer.TryGetAccessToken(vxi.AppID, vxi.AppSecret);

            string access_token = AccessTokenContainer.GetAccessToken(vxi.AppID);

                WebLogs.Debug("Get AccessToken", access_token);
                WebLogs.Debug("Get AppID", vxi.AppID);

            StringBuilder ticketUrl = new StringBuilder();

            ticketUrl.AppendFormat("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);

            WebLogs.Debug("Get ticketUrl", ticketUrl.ToString());

            string ticket = JsApiTicketContainer.GetJsApiTicket(vxi.AppID);
            string oragiralStr = "jsapi_ticket=" + ticket + "&noncestr=" + GetRandomString() + "&timestamp=" + GetTimeTrap() + "&url=" + url;
            string signature = SHA1(oragiralStr).ToLower();

            WebLogs.Debug("Get ticket", ticket);
            WebLogs.Debug("Get oragiralStr", oragiralStr);
            WebLogs.Debug("Get signature", signature);

            c.Response.Write("{\"appid\":\"" + vxi.AppID + "\",\"timestamp\":" + GetTimeTrap() + ",\"nonceStr\":\"" + GetRandomString() + "\",\"signature\":\"" + signature + "\"}");
        }

        private int GetTimeTrap()
        {
            return (int)DateTime.Now.Ticks;
        }

        private string GetRandomString()
        {
            string rString = null;
            Random ran = new Random((int)DateTime.Now.Ticks);

            for (int i = 0; i < 10; i++)
                rString += (char)ran.Next((int)‘a‘, (int)‘z‘); 

            return rString;
        }

        private string SHA1(string src)
        {
            byte[] cleanBytes = Encoding.Default.GetBytes(src);
            byte[] hashedBytes = System.Security.Cryptography.SHA1.Create().ComputeHash(cleanBytes);

            return BitConverter.ToString(hashedBytes).Replace("-", "");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

前端如何呼叫獲取票證處理常式 (以下為前端頁面的 js 程式碼片段,僅摘錄重點)

    $.ajax({
        url: "/user/ashx/GetVXinInfo.ashx?xlc_id=" + xlcId,
        success: function (data) {
            if (data != "error")
            {
                var wxInfo = $.parseJSON(data);

                wx.config({
                    debug: false, // 羲?覃彸耀宒,覃蚚腔垀衄api腔殿隙硉頗婓諦誧傷alert堤懂ㄛ?猁脤艘換?腔統杅ㄛ褫眕婓pc傷湖羲ㄛ統杅陓洘頗籵徹log湖堤ㄛ躺婓pc傷奀符頗湖荂
                    appId: wxInfo.appid, // 斛沓ㄛ鼠笲瘍腔峔珨梓妎
                    timestamp: wxInfo.timestamp, // 斛沓ㄛ汜傖?靡腔奀潔期
                    nonceStr: wxInfo.nonceStr, // 斛沓ㄛ汜傖?靡腔呴儂揹
                    signature: wxInfo.signature,// 斛沓ㄛ?靡ㄛ獗蜇翹1
                    jsApiList: [‘getLocation‘, ‘closeWindow‘] // 斛沓ㄛ剒猁妏蚚腔JS諉諳蹈桶ㄛ垀衄JS諉諳蹈桶獗蜇翹2
                });

                wx.ready(function () {
                    wx.getLocation({
                        type: ‘wgs84‘,
                        success: function (res) {
                            $.get(
                                "/user/ashx/GetLocation.ashx",
                                { "Location_x": res.latitude, "Location_y": res.longitude },
                                function (data) {
                                    GetXlcList($("#L_xlc")[0], data);
                                }
                            );
                        }
                    });
                });
            }
            else
            {
                GetXlcList($("#L_xlc")[0], "")
            }
        }
    });
时间: 2024-10-23 00:22:55

實際案例: 獲取臨時票証 (JsApi Ticket)的相关文章

實際案例: 已知要獲取臨時票証 (JsApi Ticket) 才能調用的接口

需獲取票証才能調用的接口,簡單列示如下: 一.基礎類 1. wx.checkJsApi (當前客戶端是否支持指定JS) 二.分享類 1.wx.onMenuShareTimeline (分享到朋友圈)2.wx.onMenuShareAppMessage (分享給好友)3.wx.onMenuShareQQ (分享到QQ)4.wx.onMenuShareWeibo (分享到微博)5.wx.onMenuShareQZone (分享到QQ空間) 三.圖片類1.wx.chooseImage (相冊選圖)2.

實際案例: 接口接入驗證 (公眾號設定)

一.登入官方的微信公眾號平台 二.進入設定頁面 三.進入服務器配置 四.填寫握修改配置信息 補充說明: 1.URL:就是做轉接的網址,實際執行驗證的程式碼寫在這裡. 2.Token:本質就是一個字串,內容可以隨便輸入,長度在 3 ~ 32 個字元之間,只要後續呼叫時所輸入的 token 和這裡設定的一致即可.講究一點的,可以試試用 Visual Studio 的 GUID 產生器,或者用 SQL Server 的 NewID() 函式產生 32 個字元的字串. 3.EncodingAESKey:

實際案例: 接口接入驗證 (程式碼)

同樣的 本案例也是採用大名鼎鼎的 Senparc 微信開發套件 廢話不多說,具體程式碼如下 using ShouJia.BO; using ShouJia.Common; using ShouJia.Debugger; using ShouJia.Facades; using ShouJia.Framework; using Senparc.Weixin.MP; using System; using System.Data; using System.Data.Common; using Sy

解決Spring的定時器如何獲取項目的部署路徑

最近在寫項目的時候遇到在Spring的定時器下需要用到項目路徑的,但是在定時器中,沒法獲取request或者session不能直接調用他的方法直接獲得,那麼怎麼解決這樣的問題呢?其實還是有辦法的,正所謂條條道路通羅馬,spring這麼強大怎麼可能被這點小事給整過去. 我舉個例子吧,加入我們需要些這麼個定時器,他的需求如下:每天進行一次項目生成的一次性的文件進行刪除 那麼定時器代碼如下: package com.smartsoft.quartz; import java.io.File; impo

獲取12306所需剩餘的票

1.登陸官網,找到所需票頁面: 2.按F12然後點擊查詢: 3.先安裝requests 第三方庫: #pip install requests 4.寫入以下代碼: 1 #!/usr/bin/env python3 2 # -*- coding: UTF-8 -*- 3 4 import requests 5 6 #獲取12306官網的數據url 7 def pacong(): 8 reque = requests.get('https://kyfw.12306.cn/otn/leftTicket

自動獲取外網IP并發郵件

問題: 公司有一Web系統需開放給香港Office公司查詢資料,但最近動態域名需實名認證, 因系統較小型,非公開大範圍使用,所以再認證一域名也沒多大必要, 所以想定時生成一封能查詢外網IP的郵件發送給相關同事. 方案: 1.新建一個VBS文件用來獲取IP和發送郵件: 1 On Error Resume next 2 3 Set objEmail=CreateObject("CDO.Message") 4 5 Call SendMail() 6 7 Sub SendMail 8 Url=

實戰案例 - 微信開發重點摘要之用戶唯一識別碼與網頁存取授權碼 (2)

在取得用戶同意授權碼之後,就可以接著拿 openid 和 access token. openid 筆者稱之為用戶唯一識別碼,access code 則是網頁存取授權碼.從騰訊的公眾平台開發文件可以知道,openid 是跟著用戶走的,每個用戶都有自己的識別碼,這個識別碼也是開發者在寫程式的過程中,區分微信用戶的途徑:而 access code 則有類似鑰匙的作用,有了這個和 openid 就能獲取用戶資訊,要取得用戶識別碼和網頁存取授權碼,最關鍵的地方在這個網址: https://api.wei

抓取12306余票

目的:抓取12306余票随时间的变化规律,推导出12306的放票规则,从而能制定更好的抢票策略. 难点.问题: 准备抓取多少个站点 抓取的日期范围多大 如何储存数据.变量有查询开始站点.查询结束站点.出发日期. 数据分析.上面的数据足够多:比如整个预售期30天,乃至整年的数据,尤其是春运这个高峰期. 可能会遇到12306的反爬虫策略,具体问题到时具体分析.

C#-Windows服務以LocalSystem賬戶安裝的話無法獲取我的文檔路徑

如圖,如果Window服務以上圖 Account安裝運行,則無法獲取到 以下路徑: System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 解决方案: 1.将LocalSystem改成User,然后编译安装程序,在安装的时候填上当前的 登录用户的 账号信息即可. 参考资料: ServiceProcessInstaller类的Account属性值可以是ServiceAcount枚举的任一值,见表2 值 意义