1.访问微信公众号进行证书的下载安装,安装时注意需要密钥,密钥是商户号;
2.商户的配置的处理以及需要充钱;
3.调用接口是,需要在配置的IP地址上面调用,否则会调用失败提醒;具体的代码:
public static string SendRedPack(WxPayData inputObj, string re_openid, string total_amount, string client_ip)
{
string mchbillno = DateTime.Now.ToString("HHmmss") + TenPayUtil.BuildRandomStr(28);
// RequestHandler packageReqHandler = new RequestHandler(null);
//设置package订单参数
inputObj.SetValue("nonce_str", Guid.NewGuid().ToString("N")); //随机字符串
inputObj.SetValue("wxappid", "****"); //公众账号ID
inputObj.SetValue("mch_id", "****"); //商户号
inputObj.SetValue("mch_billno", mchbillno); //填入商家订单号
inputObj.SetValue("nick_name", ""); //提供方名称
inputObj.SetValue("send_name", ""); //红包发送者名称
inputObj.SetValue("re_openid", re_openid); //接受收红包的用户的openId
inputObj.SetValue("total_amount", total_amount); //付款金额,单位分
inputObj.SetValue("min_value", total_amount); //最小红包金额,单位分
inputObj.SetValue("max_value", total_amount); //最大红包金额,单位分
inputObj.SetValue("total_num", "1"); //红包发放总人数
inputObj.SetValue("wishing", ""); //红包祝福语
inputObj.SetValue("client_ip", client_ip); //调用接口的机器Ip地址
inputObj.SetValue("act_name", ""); //活动名称
inputObj.SetValue("remark", "备注信息"); //备注信息
inputObj.SetValue("sign", inputObj.MakeSign()); //签名
//退款需要post的数据
string data = inputObj.ToXml();
//退款接口地址
string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
//本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中)
string cert = @"C:\apiclient_cert.p12";
//私钥(在安装证书时设置)
string password = ""; //商户号
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
//调用证书
X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
#region 发起post请求
HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
webrequest.ClientCertificates.Add(cer);
webrequest.Method = "post";
byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
webrequest.ContentLength = postdatabyte.Length;
Stream stream;
stream = webrequest.GetRequestStream();
stream.Write(postdatabyte, 0, postdatabyte.Length);
stream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
string responseContent = streamReader.ReadToEnd();
#endregion
return responseContent;
}