文章出處
View Code
View Code
View Code
文章列表
一、流程圖
電子發票流程涉及用戶、商戶、報銷方、發票平臺和公眾平臺五個角色。
對于自建發票平臺的商戶,發票平臺即為商戶自身的開票系統,承擔著制作發票卡券、將發
票卡券插入用戶卡包以及報銷狀態更新的關鍵作用。
二、步驟及頁面
步驟1:檢查是否微信打開
步驟2:檢查微信版本是否高于或者等于6.0.2版本
//"Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X) //AppleWebKit / 534.46(KHTML, like Geocko)Mobile / 9B206 MicroMessenger/ 6.0.2 " //其中6.0.2為用戶安裝的微信版本號。商戶可以判定版本號是否高于或者等于6.0.2。
步驟3:檢查發票是否真實存在
步驟4:獲取微信token

/// <summary> ///獲取微信token /// </summary> /// <returns></returns> public static string GetToken() { string CGIBaseUrl = GlobalConfig.Settings["WechartBaseUrl"]; string AppId = GlobalConfig.Settings["EfpgjAppId"]; string security = GlobalConfig.Settings["EfpgjSecurity"]; ObjectCache oCache = MemoryCache.Default; string fileContents = oCache["wechart_token"] as string; if (fileContents == null) { var url = string.Format("{0}/token?grant_type=client_credential&appid={1}&secret={2}", CGIBaseUrl + "/cgi-bin", AppId, security); using (WebClient client = new WebClient()) { client.Encoding = Encoding.UTF8; string data = client.DownloadString(url); var result = JObject.Parse(data); if (result["access_token"] != null && result["access_token"].Value<string>() != string.Empty) { CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTime.Now.AddMinutes(120);//取得或設定值,這個值會指定是否應該在指定期間過后清除 fileContents = result["access_token"].Value<string>(); oCache.Set("wechart_token", fileContents, policy); } } } return fileContents; }
步驟5:獲取發票平臺 s_pappid
步驟6:獲取發票 ticket

/// <summary> /// 獲取臨時Ticket /// </summary> /// <param name="token"></param> /// <returns></returns> public static string GetTicket(string token) { ObjectCache oCache = MemoryCache.Default; string fileContents = oCache["wechart_ticket"] as string; if (fileContents == null) { string CGIBaseUrl = GlobalConfig.Settings["WechartBaseUrl"]; var url = string.Format("{0}/cgi-bin/ticket/getticket?access_token={1}&type=wx_card", CGIBaseUrl, token); var data = string.Empty; var arg = new { access_token = token }; var paramStr = JsonConvert.SerializeObject(arg); using (var client = new WebClient()) { client.Encoding = Encoding.UTF8; data = client.UploadString(url, paramStr); } var result = JObject.Parse(data); CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTime.Now.AddMinutes(120);//取得或設定值,這個值會指定是否應該在指定期間過后清除 fileContents = result["ticket"].Value<string>(); oCache.Set("wechart_ticket", fileContents, policy); } return fileContents; }
步驟7:獲取授權頁鏈接URL

/// <summary> /// 獲取授權頁鏈接 /// </summary> /// <param name="CGIBaseUrl"></param> /// <param name="token"></param> /// <returns></returns> public static string GetAuthUrl(string token, EInvoice invoice, int flags) { var spid = CheckToken(token); try { string CGIBaseUrl = GlobalConfig.Settings["WechartBaseUrl"]; var url = string.Format("{0}/card/invoice/getauthurl?access_token={1}", CGIBaseUrl, token); var data = string.Empty; var arg = new { s_pappid = spid, order_id = invoice.SwiftNumber, money = invoice.SummaryAmount * 100, timestamp = ConvertDateTimeInt(DateTime.Now), source = "web", redirect_url = GlobalConfig.Settings["WechartEIUrl"] + "/#!/wechartCardReturn/" + invoice.Id+"/"+invoice.CustomerName + "/" + flags, //redirect_url = "http://eiapp.chinacloudsites.cn" + "/#!/testInsertcardCpt/" + SwiftNumber, ticket = GetTicket(token), type = 2,//授權類型, 0:開票授權, 1:填寫字段開票授權, 2:領票授權 }; var paramStr = JsonConvert.SerializeObject(arg); using (var client = new WebClient()) { client.Encoding = Encoding.UTF8; data = client.UploadString(url, paramStr); } var result = JObject.Parse(data); if (result["auth_url"] != null && result["auth_url"].Value<string>() != string.Empty) { return result["auth_url"].Value<string>(); } else return data; } catch (Exception ex) { return spid + "/" + token + "/" + ex.Message; } }
步驟8:步驟7接口字段:授權成功后跳轉頁面,此頁面中進行創建卡券-將電子發票插入用戶卡包中操作
參考資料:https://fapiao.weixin.qq.com/cgi-bin/devdoc
文章列表
全站熱搜