呼叫微信公眾號現金紅包介面給使用者傳送紅包
紅包功能簡單介紹:
1、商戶呼叫介面時,通過指定傳送物件以及傳送金額的方式發放紅包,這樣的方式,允許商戶靈活的應用於各種各樣豐富的活動場景
2、領取到紅包後,使用者的資金直接進入微信零錢,避免繁複的領獎流程,帶給使用者微信支付原生的流暢體驗
現金紅包官網文件地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1
呼叫現金紅包介面需要使用到證書,請前往商戶平臺下載證書
官網有關詳細證書的介紹:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3
因為傳送現金紅包是從商戶平臺餘額扣款,所以商戶平臺的賬戶餘額必須有充足的餘額
下面是呼叫紅包介面詳細程式碼:1、簽名的MD5加密類:
/// <summary> /// MD5UtilHelper 的摘要說明。 /// </summary> public class MD5UtilHelper { public MD5UtilHelper() { // // TODO: 在此處新增建構函式邏輯 // }/// <summary> /// 獲取大寫的MD5簽名結果 /// </summary> /// <param name="encypStr"></param> /// <param name="charset"></param> /// <returns></returns> public static string GetMD5(string encypStr, string charset){ string retStr; MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider(); //建立md5物件 byte[] inputBye; byte[] outputBye; //使用GB2312編碼方式把字串轉化為位元組陣列. try { inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr); } catch (Exception ex) { inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr); } outputBye = m5.ComputeHash(inputBye); retStr = System.BitConverter.ToString(outputBye); retStr = retStr.Replace("-", "").ToUpper(); return retStr; } }
2、處理引數的類:
public class RequestHandler { public RequestHandler(HttpContext httpContext) { Parameters = new Hashtable(); this.HttpContext = httpContext ?? HttpContext.Current; } /// <summary> /// 金鑰 /// </summary> private string Key; protected HttpContext HttpContext; /// <summary> /// 請求的引數 /// </summary> protected Hashtable Parameters; /// <summary> /// debug資訊 /// </summary> private string DebugInfo; /// <summary> /// 初始化函式 /// </summary> public virtual void Init() { } /// <summary> /// 獲取debug資訊 /// </summary> /// <returns></returns> public String GetDebugInfo() { return DebugInfo; } /// <summary> /// 獲取金鑰 /// </summary> /// <returns></returns> public string GetKey() { return Key; } /// <summary> /// 設定金鑰 /// </summary> /// <param name="key"></param> public void SetKey(string key) { this.Key = key; } /// <summary> /// 設定引數值 /// </summary> /// <param name="parameter"></param> /// <param name="parameterValue"></param> public void SetParameter(string parameter, string parameterValue) { if (parameter != null && parameter != "") { if (Parameters.Contains(parameter)) { Parameters.Remove(parameter); } Parameters.Add(parameter, parameterValue); } } /// <summary> /// 建立md5摘要,規則是:按引數名稱a-z排序,遇到空值的引數不參加簽名 /// </summary> /// <param name="key">引數名</param> /// <param name="value">引數值</param> /// key和value通常用於填充最後一組引數 /// <returns></returns> public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return sign; } /// <summary> /// 輸出XML /// </summary> /// <returns></returns> public string ParseXML() { StringBuilder sb = new StringBuilder(); sb.Append("<xml>"); foreach (string k in Parameters.Keys) { string v = (string)Parameters[k]; if (Regex.IsMatch(v, @"^[0-9.]$")) { sb.Append("<" + k + ">" + v + "</" + k + ">"); } else { sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">"); } } sb.Append("</xml>"); return sb.ToString(); } /// <summary> /// 設定debug資訊 /// </summary> /// <param name="debugInfo"></param> public void SetDebugInfo(String debugInfo) { this.DebugInfo = debugInfo; } public Hashtable GetAllParameters() { return this.Parameters; } protected virtual string GetCharset() { return this.HttpContext.Request.ContentEncoding.BodyName; } }
3、呼叫現金紅包處理類:
/// <summary> /// 企業號微信支付介面 /// </summary> public static class TenPay { #region 企業向用戶發紅包 /// <summary> /// 用於企業向微信使用者個人發紅包 /// 目前支援向指定微信使用者的openid個人發紅包 /// </summary> /// <param name="certPassword">apiclient_cert.p12證書密碼即商戶號</param> /// <param name="data">微信支付需要post的xml資料</param> /// <param name="certPath">apiclient_cert.p12的證書物理位置(例如:E:\projects\文件\微信商戶平臺證書\商戶平臺API證書</param> /// <param name="timeOut"></param> /// <returns></returns> public static string Sendredpack(string data, string certPassword,string certPath, int timeOut = Config.TIME_OUT) { var urlFormat = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; string cert = certPath; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); X509Certificate2 cer = new X509Certificate2(cert, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//設定指標讀取位置 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlFormat); request.ClientCertificates.Add(cer); request.Method = "POST"; request.Timeout = timeOut; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"; #region 輸入二進位制流 if (ms != null) { ms.Position = 0; //直接寫入流 Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) != 0) { requestStream.Write(buffer, 0, bytesRead); } ms.Close();//關閉檔案訪問 } #endregion HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { using (StreamReader myStreamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"))) { string retString = myStreamReader.ReadToEnd(); return retString; } } } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { if (errors == SslPolicyErrors.None) return true; return false; } #endregion }
4、呼叫現金紅包介面
#region 傳送紅包 bool fals = false; //記錄傳送紅包是否成功 string xmlResult = null; //現金紅包介面返回的xml string certPath = null; //證書在伺服器的物理位置 string data = null; //呼叫現金紅包介面需要的資料 try { //建立支付應答物件 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); string nonceStr = TenPayV3Util.GetNoncestr(); //時間戳 //設定package訂單引數 packageReqHandler.SetParameter("nonce_str", nonceStr); //隨機字串,不長於32位 packageReqHandler.SetParameter("mch_billno", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"] + model.JournalNumber);//商戶訂單號(每個訂單號必須唯一)組成:mch_id+yyyymmdd+10位一天內不能重複的數字。介面根據商戶訂單號支援重入,如出現超時可再呼叫。 packageReqHandler.SetParameter("mch_id", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"]); //微信支付分配的商戶號 packageReqHandler.SetParameter("wxappid", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_AppId"]);//微信分配的公眾賬號ID(企業號corpid即為此appId)。介面傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。 packageReqHandler.SetParameter("send_name", "測試");//商戶名稱 packageReqHandler.SetParameter("re_openid", model.BankCard); //使用者openid 接受紅包的使用者使用者在wxappid下的openid packageReqHandler.SetParameter("total_amount", Convert.ToInt32((decimal)(model.Amount * 100M)).ToString(CultureInfo.InvariantCulture)); //付款金額 單位分 packageReqHandler.SetParameter("total_num", "1"); //紅包發放總人數 packageReqHandler.SetParameter("wishing", "測試紅包"); //紅包祝福語 packageReqHandler.SetParameter("client_ip", HttpContext.Current.Request.UserHostAddress);//Ip地址 packageReqHandler.SetParameter("act_name", "測試紅包");//活動名稱 packageReqHandler.SetParameter("remark", "測試紅包"); //備註 string sign = packageReqHandler.CreateMd5Sign("key", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_Key"]); packageReqHandler.SetParameter("sign", sign); //簽名 data = packageReqHandler.ParseXML(); certPath = Server.MapPath("~/") + System.Configuration.ConfigurationManager.AppSettings["certPath"]; xmlResult = Sendredpack(data, System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"],certPath); var res = XDocument.Parse(xmlResult); string return_code = res.Element("xml").Element("return_code").Value; if ("SUCCESS".Equals(return_code)) { string result_code = res.Element("xml").Element("result_code").Value; if ("SUCCESS".Equals(result_code)) { fals = true; } } } catch (Exception exception) { } #endregion
注意:證書所在資料夾許可權,IIS必須有許可權對該資料夾操作的許可權。
相關推薦
呼叫微信公眾號現金紅包介面給使用者傳送紅包
紅包功能簡單介紹: 1、商戶呼叫介面時,通過指定傳送物件以及傳送金額的方式發放紅包,這樣的方式,允許商戶靈活的應用於各種各樣豐富的活動場景 2、領取到紅包後,使用者的資金直接進入微信零錢,避免繁複的領獎流程,帶給使用者微信支付原生的流暢體驗 現金紅包官網文件地址:h
微信公眾號客服介面給指定使用者openid傳送訊息
微信開發文件: 客服介面-發訊息 介面呼叫請求說明 http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 各訊息型別所需的
C# 呼叫微信公眾號介面獲取會員資訊示例
公眾號獲取使用者資訊,比較簡單指定Post請求,立刻獲得。 1.使用者資訊定義 /// <summary> /// 授權之後獲取使用者基本資訊 /// </s
C# 呼叫微信公眾號介面傳送客服訊息示例
客服訊息傳送比較簡單 注:指定openid和訊息內容使用Post傳送就可以,很多時候需要在觸發事件或相應的情況下發送 1.獲取傳送地址 /// <summary> /// 客服傳送訊息-
微信公眾號獲取素材介面呼叫次數限制的解決辦法
問題描述:微信公眾號開發 之前每次推送訊息都需要呼叫素材介面,但獲取素材介面每天都有次數限制 解決辦法: 1.設定定時器 +單例模式 每分鐘更新一次素材資訊,將素材資訊付給單例物件屬性(成員)。 定時器: applicationContext-conf
vue中呼叫微信公眾號的圖片預覽
今天做專案的時候遇到這個問題,不多說廢話,直接上步驟: 引入wxjs <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 下面寫個函式呼叫:
微信公眾號開發體驗介面
1.新建Module wechat 2.按照上篇文章,先成功接入微信介面 3.由於winxin4j使用redis進行快取Token,所以請先配置springboot+redis的整合,它的access_token每2小時變換一次。 1)啟動redis,連線radis 2)配置專案中
.net微信公眾號開發——基礎介面
1 獲取許可令牌 AccessToken類封裝了許可令牌的相關屬性和方法。 (注:OAuthAccessToken封裝了網頁授權許可令牌的相關方法。) 屬性有: access_token——令牌字串 expires_in——有效時
基於thinkphp3.2微信公眾號模板訊息介面通知示例
首先把下面的WxTemple放在\www\ThinkPHP\Library\Vendor下<?phpclass sendMessage {//獲取accesstokenfunction getAccesstoken(){$ch=curl_init();$appid=""
H5呼叫微信公眾號支付
?function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg);
微信公眾號php開發介面怎麼主動推送資訊
最全視訊教程,手把手教你開發微信公眾號:連結地址 愛爾蘭的天空(ai & love),wordpress,情侶主題,情侶部落格,wordpress主題,wordpress部落格 http://yangxiaozhao.sinaapp.com/ POPMu
微信公眾號介面呼叫JS-SDK(vue專案,以掃一掃為例)
該方法需引入微信js-sdk ,先npm安裝 //在一個地方呼叫this.weixin()方法,比如說按鈕 //寫掃一掃方法 weixin() { var that = this; var url=''; var params =
微信公眾號呼叫客服介面傳送資訊
public void customSend(String content,String openId,String accessToken){ JSONObject json=new JSONObject(); JSONObject text=new JSONOb
自己整理的微信公眾號類比較全 從認證配置到呼叫各種介面都能用的
<?php namespace Org\Util; class Wechat{ const MSGTYPE_TEXT = 'text'; const MSGTYPE_IMAGE = 'image'; const MSGTYPE_LOCATION = 'loca
關於微信公眾號開發呼叫jssdk介面以及騰訊地圖API
一,呼叫支付介面 1.必須引入許可權的js <script src="js/jweixin-1.0.0.js"></script> 2.js部分的初始化配置 paymentAuthorization();//頁面支付許可權授權 // 點
微信公眾號開發 自定義分享 從前臺到Java後臺 呼叫微信JS介面分享朋友圈
20180811寫在前面的話 有很多人遇到問題之後問我,結果大多數是因為配置問題,所以請詳細閱讀前面的配置步驟。 20181016注意事項 文中原始碼下載地址 上面這個地址是我當時做的整個專案的原始碼,包含了一些業務在裡面,用的是SSM框架,現在寫了一
微信公眾號平臺開發(三):幾大微信介面的呼叫
文章結構 1、怎麼呼叫微信高階介面 2、呼叫微信高階幾大例項 2.1、呼叫自定義選單介面 2.2、客服介面 2.3、生成二維碼 3、獲取非微信功能介面,如天氣網的天氣介面、股票網站的資訊介面。 怎麼呼叫微信高階介
微信公眾號 呼叫客服介面實現圖文推送例項、
微信平臺更新之後,發現客服介面不錯。研究了下 和大家分享下。 按照官方文件,是向客服介面傳送規定的JSon 就可以了。 首先先封裝下 JSon 的類: package com.lwz.wx.bean.kf; // 這個是最外層的 也可以說是基類吧、 public class
微信公眾號介面呼叫頻次限制說明
公眾號呼叫介面並不是無限制的。為了防止公眾號的程式錯誤而引發微信伺服器負載異常,預設情況下,每個公眾號呼叫介面都不能超過一定限制,當超過一定限制時,呼叫對應介面會收到如下錯誤返回碼: {"errcode":45009,"errmsg":"api freq out
關註PHPthinking官網微信公眾號——紅包來襲
技術 text font 微信訂閱號 微信紅包 water fonts pac think 歡迎大家掃描關註PHPthinking官方微信訂閱號,我們將給您定期發送質量博文、新聞趣事、站點公告等等,同一時候還有PHPthinking準備的每日微信紅包(金額不等,已發出百