using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WxPayAPI; namespace UI { public partial class NativeNotifyPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { NativeNotify nativeNatify = new NativeNotify(this); nativeNatify.ProcessNotify(); } } }
这是支付成功结果页的后台代码,如何能回调参数呢,求赐教!!
回调参数?是指获取微信支付成功后回调给你的参数么?支付成功后微信会带参数调用notify_url,可以使用HttpContext.Current.Request获取,具体参数可以参考微信文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
string return_code = HttpContext.Current.Request["return_code"];
是这样获取吗?
@dkh: 是的
@webaspx: 能直接这样获取参数?
微信返回的是这样的格式
<xml> <appid><![CDATA[wx2421b1c4370ec43b]]></appid> <attach><![CDATA[支付测试]]></attach> <bank_type><![CDATA[CFT]]></bank_type> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str> <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid> <out_trade_no><![CDATA[1409811653]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign> <sub_mch_id><![CDATA[10000100]]></sub_mch_id> <time_end><![CDATA[20140903131540]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id> </xml>
@dkh: 你可以下个Senparc.Weixin.mp 这个来用,获取回调值已经封装好了的。
public ResponseHandler(HttpContext httpContext) { Parameters = new Hashtable(); XmlMap = new Hashtable(); this.HttpContext = httpContext ?? HttpContext.Current; NameValueCollection collection; //post data if (this.HttpContext.Request.HttpMethod == "POST") { collection = this.HttpContext.Request.Form; foreach (string k in collection) { string v = (string)collection[k]; this.SetParameter(k, v); } } //query string collection = this.HttpContext.Request.QueryString; foreach (string k in collection) { string v = (string)collection[k]; this.SetParameter(k, v); } if (this.HttpContext.Request.InputStream.Length > 0) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(this.HttpContext.Request.InputStream); XmlNode root = xmlDoc.SelectSingleNode("xml"); XmlNodeList xnl = root.ChildNodes; foreach (XmlNode xnf in xnl) { XmlMap.Add(xnf.Name, xnf.InnerText); this.SetParameter(xnf.Name, xnf.InnerText); } } }
xmlMap["attach"] ,这个就是商家数据包原样返回的。可以把参数放在这个里。这样就能在回调的时候拿到了。
怎么能放在xmlMap里呢?我没做过这样的数据操作,详细说明一下吧,谢谢
@dkh: 你应该先做好这个,支付接口创建并请求成功,用户打开付款操作之后,转到你的回调页面。在你创建支付接口的时候构建好你的参数。
RequestHandler paySignReqHandler = new RequestHandler(); //我们现在用到的是这个
paySignReqHandler.init();
//设置package订单参数
paySignReqHandler.setParameter("appid", app.InterfaceAppId); //appid 这个你得自己去构建。
在这里的时候可以设置attach参数
Hashtable xmlMap=new Hashtable();这个由你的判断签名的方法里out出来。
也就是你的回调页面。你可以在这里取得回调参数。
@贫民窟大侠: Hashtable xmlMap=new Hashtable(); 这个还是没有明白,有具体的例子吗?