1.登录微信公众平台:
1.1设置密钥
1.2设置服务器需要访问的IP
1.3设置服务器配置(上篇文章写到)
1.4查看APPID

2.登录商户平台
2.1申请和微信公众平台进行绑定
2.2域名回调地址
2.3查看API密钥(注意是V2版本还是V3版本)
2.4查看商户号
3.代码编写
3.1进行统一下单接口 (代码如下)
3.2返回的参数给前端,由前端进行调起微信支付
3.3后端设置回调地址和接口,进行设置订单的状态。
var tenPayData = new TenPayRequestData(
entity.AppId,
entity.MchNo,
"微信支付通知",
outTradeNo,
payMoney,
ConfigurationManager.AppSettings["IP"],
notifyUrl,
(TenPayV3Type)Enum.Parse(typeof(TenPayV3Type), payType, true),
openID,
entity.MchKey,
WeixinHelper.Tools.GetNonceStr(),
attach,
string.Empty
);
var unifiedordeResult = WeixinHelper.Pay.Unifiedorder(tenPayData);
public TenPayRequestData(string appId, string mchId, string body, string outTradeNo, decimal totalFee, string spbillCreateIp, string notifyUrl, TenPayV3Type tradeType, string openid, string key, string nonceStr, string attach, string product_id)
{
AppId = appId;
MchId = mchId;
NonceStr = nonceStr;
Body = body ?? "Senparc TenpayV3";
OutTradeNo = outTradeNo;
TotalFee = totalFee;
SpbillCreateIP = spbillCreateIp;
NotifyUrl = notifyUrl;
TradeType = tradeType;
OpenId = openid;
Key = key;
Attach = attach;
Product_id = product_id;
#region 设置RequestHandler
//创建支付应答对象
PackageRequestHandler = new RequestHandler(null);
//初始化
PackageRequestHandler.Init();
this.Body = Body = Body.Length > 128 ? Body.Substring(0, 120) + "..." : Body;
//设置package订单参数
PackageRequestHandler.SetParameter("appid", this.AppId); //公众账号ID
PackageRequestHandler.SetParameter("attach", this.Attach);
PackageRequestHandler.SetParameter("mch_id", this.MchId); //商户号
PackageRequestHandler.SetParameter("nonce_str", this.NonceStr); //随机字符串
PackageRequestHandler.SetParameter("body", this.Body); //商品信息
PackageRequestHandler.SetParameter("out_trade_no", this.OutTradeNo); //商家订单号
PackageRequestHandler.SetParameter("total_fee", (this.TotalFee * 100).ToString().Replace(".00", string.Empty).Replace(".0", string.Empty)); //商品金额,以分为单位(money * 100).ToString()
PackageRequestHandler.SetParameter("spbill_create_ip", this.SpbillCreateIP); //用户的公网ip,不是商户服务器IP
PackageRequestHandler.SetParameter("notify_url", this.NotifyUrl); //接收财付通通知的URL
PackageRequestHandler.SetParameter("trade_type", this.TradeType.ToString()); //交易类型
PackageRequestHandler.SetParameter("openid", this.OpenId);
PackageRequestHandler.SetParameter("product_id", this.Product_id);
Sign = PackageRequestHandler.CreateMd5Sign("key", this.Key);
PackageRequestHandler.SetParameter("sign", Sign); //签名
#endregion
}
var handle = WeixinHelper.Pay.GetJsPaySign(
entity.AppId,
WeixinHelper.Tools.GenerateTimeStamp().ToString(),
WeixinHelper.Tools.GetNonceStr(),
"prepay_id=" + unifiedordeResult.prepay_id,
entity.MchKey
);
var result = handle.GetAllParameters();
return Result.GetSuccess(result);
public static RequestHandler GetJsPaySign(string appId, string timeStamp, string nonceStr, string package, string key,
string signType = "MD5")
{
//设置支付参数
RequestHandler paySignReqHandler = new RequestHandler(null);
paySignReqHandler.SetParameter("appId", appId);
paySignReqHandler.SetParameter("timeStamp", timeStamp);
paySignReqHandler.SetParameter("nonceStr", nonceStr);
paySignReqHandler.SetParameter("package", package);
paySignReqHandler.SetParameter("signType", "MD5");
var paySign = paySignReqHandler.CreateMd5Sign("key", key);
paySignReqHandler.SetParameter("paySign", paySign);
return paySignReqHandler;
}
回调代码模块
public ActionResult WeiXinPayNotify()
{
try
{
FixResponseHandler resHandler = new FixResponseHandler(HttpContext);
resHandler.Init();
string return_code = resHandler.GetParameter("return_code");
string return_msg = resHandler.GetParameter("return_msg");
string res = null;
LogHelper.Info("微信支付回调:" + resHandler.ParseXML());
resHandler.SetKey(H5Config.MichScript);
//验证请求是否从微信发过来(安全)
if (resHandler.IsTenpaySign())
{
res = Handle(resHandler.GetParameter("out_trade_no"), resHandler.GetParameter("attach"));
}
else
{
res = "wrong";
}
string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg);
LogHelper.Info("微信支付处理结果:" + res);
return Content(xml, "text/xml");
}
catch (Exception ex)
{
LogHelper.Info("Result_Error:" + ex.ToString());
return null;
}
}
private Dictionary<string, string> GetRequestPost()
{
Dictionary<string, string> sArray = new Dictionary<string, string>();
if (HttpContext.Request.Method.ToUpper() == "POST" && HttpContext.Request.HasFormContentType)
{
foreach (KeyValuePair<string, StringValues> item in HttpContext.Request.Form)
{
sArray.Add(item.Key, item.Value[0]);
}
}
foreach (KeyValuePair<string, StringValues> item2 in HttpContext.Request.Query)
{
sArray.Add(item2.Key, item2.Value[0]);
}
return sArray;
}
private string Handle(string out_trade_no,string memberCode)
{
var service = IocProxyFactory.GetService<IH5Service>();
LogHelper.Info("微信支付流水号:" + out_trade_no);
var result = service.SetWxFinishPayCallback(out_trade_no,memberCode);
if (result)
{
return "success";
}
else
{
return "wrong";
}
}
5120



被折叠的 条评论
为什么被折叠?



