/** * * 网页授权获取用户基本信息的全部过程 * 详情请参看网页授权获取用户基本信息:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html * 第一步:利用url跳转获取code * 第二步:利用code去获取openid和access_token * */ public void GetOpenidAndAccessToken(string state, out string url, string code = "") { url = ""; if (!string.IsNullOrEmpty(code)) { //获取code码,以获取openid和access_token Log.Debug(this.GetType().ToString(), "Get code : " + code); GetOpenidAndAccessTokenFromCode(code); } else if (!string.IsNullOrEmpty(Host) && !string.IsNullOrEmpty(Path)) { //构造网页授权获取code的URL string redirect_uri = HttpUtility.UrlEncode("http://" + Host + Path); WxPayData data = new WxPayData(); data.SetValue("appid", WxPayConfig.APPID); data.SetValue("redirect_uri", redirect_uri); data.SetValue("response_type", "code"); data.SetValue("scope", "snsapi_base"); data.SetValue("state", state + "#wechat_redirect"); url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + data.ToUrl(); Log.Debug(this.GetType().ToString(), "Will Redirect to URL : " + url); } }
//派生类需要重写这个方法,进行不同的回调处理 public virtual void ProcessNotify(out WxPayData data) { data = null; }
public override void ProcessNotify(out WxPayData data) { if (GetNotifyData(out data)) { //检查支付结果中transaction_id是否存在 if (!data.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + data.ToXml()); return; } string transaction_id = data.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml()); } //查询订单成功 else { string mhtOrderNo = data.GetValue("out_trade_no").ToString(); decimal total_fee = StringHelper.ToDecimal(data.GetValue("total_fee")); if (!string.IsNullOrEmpty(mhtOrderNo)) { int result = 0; RechargeInfo model = new RechargeInfo(); model.OrderId = mhtOrderNo; model.FOrderId = ""; model.Cash = total_fee; model.PayMobile = ""; _rechargeService.Completed(model, out result); //1:成功 0:失败 if (result != (int)ErrorMessage.成功) { //失败 data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml()); return; } } //成功 data.SetValue("return_code", "SUCCESS"); data.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + data.ToXml()); } } }