微信公眾號開發(fā):商戶如何給用戶發(fā)紅包實例講解

閱讀 35566  ·  發(fā)布日期 2020-08-24 17:26  ·  溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】 紅包功能簡單介紹:1、商戶調(diào)用接口時,通過指定發(fā)送對象以及發(fā)送金額的方式發(fā)放紅包,這樣的方式,允許商戶靈活的應(yīng)用于各種各樣豐富的活動場景2、領(lǐng)取到紅包后,用戶的資金直接進(jìn)入微信零錢,避免繁復(fù)的領(lǐng)獎流程,帶給用戶微信支付原生的流暢體驗現(xiàn)金紅包官網(wǎng)文檔地址:https://pay.weixin.qq.com/wiki/do... 【溫州小程序開發(fā),溫州微信公眾號,平陽做網(wǎng)站,平陽網(wǎng)站建設(shè)公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號,山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...

微信公眾號開發(fā):商戶如何給用戶發(fā)紅包實例講解

紅包功能簡單介紹:
1、商戶調(diào)用接口時,通過指定發(fā)送對象以及發(fā)送金額的方式發(fā)放紅包,這樣的方式,允許商戶靈活的應(yīng)用于各種各樣豐富的活動場景2、領(lǐng)取到紅包后,用戶的資金直接進(jìn)入微信零錢,避免繁復(fù)的領(lǐng)獎流程,帶給用戶微信支付原生的流暢體驗現(xiàn)金紅包官網(wǎng)文檔地址:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1調(diào)用現(xiàn)金紅包接口需要使用到證書,請前往商戶平臺下載證書官網(wǎng)有關(guān)詳細(xì)證書的介紹:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3因為發(fā)送現(xiàn)金紅包是從商戶平臺余額扣款,所以商戶平臺的賬戶余額必須有充足的余額下面是調(diào)用紅包接口詳細(xì)代碼:
1、簽名的MD5加密類:
/// /// MD5UtilHelper 的摘要說明。
///
public class MD5UtilHelper {
public MD5UtilHelper() {
// // TODO: 在此處添加構(gòu)造函數(shù)邏輯 // }
/// /// 獲取大寫的MD5簽名結(jié)果 /// /// /// /// public static string GetMD5(string encypStr, string charset) {
string retStr;
MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();
//創(chuàng)建md5對象 byte[] inputBye;
byte[] outputBye;
//使用GB2312編碼方式把字符串轉(zhuǎn)化為字節(jié)數(shù)組. 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、處理參數(shù)的類:
public class RequestHandler {
public RequestHandler(HttpContext httpContext) {
Parameters = new Hashtable();
this.HttpContext = httpContext ?? HttpContext.Current;
}
/// /// 密鑰 /// private string Key;
protected HttpContext HttpContext;
/// /// 請求的參數(shù) /// protected Hashtable Parameters;
/// /// debug信息 /// private string DebugInfo;
/// /// 初始化函數(shù) /// public virtual void Init() {
}
/// /// 獲取debug信息 /// /// public String GetDebugInfo() {
return DebugInfo;
}
/// /// 獲取密鑰 /// /// public string GetKey() {
return Key;
}
/// /// 設(shè)置密鑰 /// /// public void SetKey(string key) {
this.Key = key;
}
/// /// 設(shè)置參數(shù)值 /// /// /// public void SetParameter(string parameter, string parameterValue) {
if (parameter != null && parameter != "") {
if (Parameters.Contains(parameter)) {
Parameters.Remove(parameter);
}
Parameters.Add(parameter, parameterValue);
}
}
/// /// 創(chuàng)建md5摘要,規(guī)則是:按參數(shù)名稱a-z排序,遇到空值的參數(shù)不參加簽名 /// /// 參數(shù)名 /// 參數(shù)值 /// key和value通常用于填充最后一組參數(shù) /// 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;
}
/// /// 輸出XML /// /// public string ParseXML() {
StringBuilder sb = new StringBuilder();
sb.Append("");
foreach (string k in Parameters.Keys) {
string v = (string)Parameters[k];
if (Regex.IsMatch(v, @"^[0-9.]$")) {
sb.Append("" + v + "" + k + ">");
}
else {
sb.Append("" + k + ">");
}
}
sb.Append("
");
return sb.ToString();
}
/// /// 設(shè)置debug信息 /// /// 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、調(diào)用現(xiàn)金紅包處理類:
/// /// 企業(yè)號微信支付接口 /// public static class TenPay {
#region 企業(yè)向用戶發(fā)紅包 /// /// 用于企業(yè)向微信用戶個人發(fā)紅包 /// 目前支持向指定微信用戶的openid個人發(fā)紅包 /// /// apiclient_cert.p12證書密碼即商戶號 /// 微信支付需要post的xml數(shù)據(jù) /// apiclient_cert.p12的證書物理位置(例如:
E:projects文檔微信商戶平臺證書商戶平臺API證書 /// /// 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);
//設(shè)置指針讀取位置 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 輸入二進(jìn)制流 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();
//關(guān)閉文件訪問 }
#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、調(diào)用現(xiàn)金紅包接口#region 發(fā)送紅包bool fals = false;
//記錄發(fā)送紅包是否成功string xmlResult = null;
//現(xiàn)金紅包接口返回的xmlstring certPath = null;
//證書在服務(wù)器的物理位置string data = null;
//調(diào)用現(xiàn)金紅包接口需要的數(shù)據(jù)try {
//創(chuàng)建支付應(yīng)答對象 RequestHandler packageReqHandler = new RequestHandler(null);
//初始化 packageReqHandler.Init();
string nonceStr = TenPayV3Util.GetNoncestr();
//時間戳 //設(shè)置package訂單參數(shù) packageReqHandler.SetParameter("nonce_str", nonceStr);
//隨機(jī)字符串,不長于32位 packageReqHandler.SetParameter("mch_billno", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"] + model.JournalNumber);
//商戶訂單號(每個訂單號必須唯一)組成:
mch_id+yyyymmdd+10位一天內(nèi)不能重復(fù)的數(shù)字。
接口根據(jù)商戶訂單號支持重入,如出現(xiàn)超時可再調(diào)用。
packageReqHandler.SetParameter("mch_id", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"]);
//微信支付分配的商戶號 packageReqHandler.SetParameter("wxappid", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_AppId"]);
//微信分配的公眾賬號ID(企業(yè)號corpid即為此appId)。
接口傳入的所有appid應(yīng)該為公眾號的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");
//紅包發(fā)放總?cè)藬?shù) 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注意:
證書所在文件夾權(quán)限,IIS必須有權(quán)限對該文件夾操作的權(quán)限。
相關(guān)文章:
PHP微信公眾號自動發(fā)送紅包API,php公眾紅包api微信公眾號紅包接口開發(fā)PHP開發(fā) CA證書出錯,請登陸微信支付商戶平臺下載證書相關(guān)視頻:
微信公眾號前段-php微信接口開發(fā)實戰(zhàn)項目視頻教程 聊天機(jī)器人以上就是微信公眾號開發(fā):
商戶如何給用戶發(fā)紅包實例講解的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
公眾號 紅包本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請注明出處,感謝您的尊重!
上一篇:
長見識了,原來微信瀏覽器內(nèi)可以直接啟動外部瀏覽器
下一篇:
最新整理出的微信分享后端接口實現(xiàn)的大致流程相關(guān)文章相關(guān)視頻修改微信號有什么影響嗎?微信中共享實時位置什么意思數(shù)據(jù)庫設(shè)計的基本原則是什么?微信小程序調(diào)用圖片安全API微信公眾號開發(fā):
商戶如何給用戶發(fā)紅包實例講解數(shù)據(jù)表的更新/刪除/查詢操作數(shù)據(jù)表的連接與新增操作2數(shù)據(jù)表的連接與新增操作1數(shù)組常用函數(shù)-3 [溫州做微信公眾號]