微信支付教程系列之公众号支付
3、授权获取用户信息,如下图:
下面开始,一步一步往下走。
然后右键项目,我们修改一下属性,如下图:
然后我们再把程序自动生成的HomeController.cs和View里面的删掉,再新建一个HomeController.cs和添加View,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Web.Controllers { public class HomeController : Controller { // GET: Home public ActionResult Index() { return View(); } } }
View代码:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> </div> </body> </html>
嗯,没错,目前还是空的,现在我们开始写前台,代码如下(我先贴上代码,后续再解释为啥这么做,因为如果一步步的写下去,按照前面两个的篇幅来,我觉得都可以开课了,所以,我先上代码,然后再一步步解释。):
后台代码如下:
这里就是上面修改了的代码,童鞋们请注意
ModelForOrder类的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Web.Models { public class ModelForOrder { public string appId { get; set; } public string timeStamp { get; set; } public string nonceStr { get; set; } public string packageValue { get; set; } public string paySign { get; set; } public string msg { get; set; } } }
还有一个地方需要注意,修改一下的就是这里WxLib/business/JsApiPay.cs,如下图:
最后,把程序发布出来,这次咱们把Web发布在上 ,然后再把接口权限,改为这样的,如下图:
注意,这里面的域名和上面我们发布的域名要一致。
除此以外,我们还需要改这里:
就是一定要授权这里,否则,支付的时候,会提示其他错误,具体,我就不测试了。
在这里面加入咱们的域名,就完美了。。。
现在,我开始一一解释我上面的做法。
首先,在后端,页面加载的时候,他会先执行
public ActionResult Index() { if (Session["openid"] == null) { try { //调用【网页授权获取用户信息】接口获取用户的openid和access_token GetOpenidAndAccessToken(); } catch (Exception ex) { //Response.Write(ex.ToString()); //throw; } } return View(); }
Session["url"] = url;
接着,在前端:
当页面加载完毕之后,会执行以下JS方法,如下:
他会先获取浏览器的url,然后获取code,就是一般url后面的xxx.com?code=xxx,这里面就是首先判断有无code,如果没有code,则,我们去后台请求这个code。为什么请求这个code呢?我们来看这个方法: getWxInfo,如下图:
/// <summary> /// 获取code /// </summary> /// <returns></returns> [HttpPost] public ActionResult getCode() { object objResult = ""; if (Session["url"] != null) { objResult = Session["url"].ToString(); } else { objResult = "url为空。"; } return Json(objResult); }
好,走到这一步,我们已经知道openid和access_token了,这个时候,我们就负责处理前端的东西。
提交之后,就会进入后台,后台需要组织我们前台需要用到的参数,其中包括如下:
我们主要需要提供的就是这个类ModelForOrder 里面的参数,然后再把这些参数返回给前台调用,如下:
然后我们确认付款之后,是否付款成功,如果付款成功,我们在执行: fAlreadyPay();
这个方法已经被我删掉了,用途是用于,我们收到用户的款之后,我们需要同步一些数据到我们的数据库里面去,所以,该怎么操作,自己自行修改了。