# 支付回调
# 支付回调
当用户在微信端完成支付后,微信服务器会主动推送一条通知到应用服务器。这条信息只会在微信官方服务器和应用服务器之间发生,不会有用户的参与,并且附加签名校验,因此才是可信的。
注意:千万不能信任手机客户端完成支付的状态,并以此通知应用服务器用户已完成支付!
以 JsApi 支付为例,当发起统一支付时,会要求填写回调地址(TenPayV3UnifiedorderRequestData
中的 notifyUrl
参数,见 JSAPI 支付 相关说明)。
注意:不同的支付方式提供回调地址的设置可能不同,如“Native 支付”,则是在微信支付的管理后台设置。
# 定义回调入口
/// <summary>
/// JS-SDK支付回调地址(在统一下单接口中设置notify_url)
/// </summary>
/// <returns></returns>
public ActionResult PayNotifyUrl()
{
try
{
ResponseHandler resHandler = new ResponseHandler(HttpContext);
string return_code = resHandler.GetParameter("return_code");
string return_msg = resHandler.GetParameter("return_msg");
string res = null;
resHandler.SetKey(TenPayV3Info.Key);
//验证请求是否从微信发过来(安全)
if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
{
res = "success";//正确的订单处理
//直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
}
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);
return Content(xml, "text/xml");
}
catch (Exception ex)
{
WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));
throw;
}
}
本项目参考文件:
/Controllers/TenPayV3Controller.cs