private void GetPaySign(HttpContext context) { //定义统一消息体 Core.Data.Entity.SystemEntity.MessageModel message = new Core.Data.Entity.SystemEntity.MessageModel(); //定义请求工具 HttpGetOrPost httpHelper = new HttpGetOrPost(); //定义重定向URL string redirect_url1 = HttpUtility.UrlEncode("https://www.yuming.com.cn/auth.aspx"); string redirect_url2 = HttpUtility.UrlEncode("https://www.yuming.com.cn/success.html"); var jsCode = Q("code", context); if (string.IsNullOrEmpty(jsCode)) { message.msg = "0"; message.data = ""; context.Response.Write(JsonConvert.SerializeObject(message)); return; } #region 第二步,获取openid string url2 = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={WechatJSAPIConfig.appid}&secret={WechatJSAPIConfig.appSecret}&code={jsCode}&grant_type=authorization_code"; /* 正确的json * { * "access_token":"ACCESS_TOKEN", * "expires_in":7200, * "refresh_token":"REFRESH_TOKEN", * "openid":"OPENID", * "scope":"SCOPE" * } */ string response2 = httpHelper.HttpGet(url2); WechatOAuthResponse oauth = JsonConvert.DeserializeObject <WechatOAuthResponse>(response2); if (oauth == null || !string.IsNullOrEmpty(oauth.errcode)) { message.msg = "0"; message.data = ""; context.Response.Write(JsonConvert.SerializeObject(message)); } //拿到OPENID var openid = oauth.openid; context.Session["openid"] = oauth.openid; #endregion #region 第三步获取access_token //注意该access_token与授权access_token不一样 string url3 = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={WechatJSAPIConfig.appid}&secret={WechatJSAPIConfig.appSecret}"; string response3 = httpHelper.HttpGet(url3); WechatAccessResponse access = JsonConvert.DeserializeObject <WechatAccessResponse>(response3); if (access == null || access.errcode != 0) { message.msg = "0"; message.data = ""; context.Response.Write(JsonConvert.SerializeObject(message)); } //拿到OPENID string access_token = access.access_token; #endregion #region 第四步,获取jsapi_ticket string url4 = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={access_token}&type=jsapi"; /* 正确的json * { * "errcode":0, * "errmsg":"ok", * "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA", * "expires_in":7200 * }*/ string response4 = httpHelper.HttpGet(url4); WechatTicketResponse ticket = JsonConvert.DeserializeObject <WechatTicketResponse>(response4); if (ticket == null || ticket.errcode != 0) { message.msg = "0"; message.data = ""; context.Response.Write(JsonConvert.SerializeObject(message)); } //记录ticket string jsapi_ticket = ticket.ticket; #endregion string timestamp = WxPayApi.GenerateTimeStamp(); string nonceStr = WxPayApi.GenerateNonceStr(); context.Session["timestamp"] = timestamp; context.Session["nonceStr"] = nonceStr; WxPayData configData = new WxPayData(); configData.SetValue("jsapi_ticket", jsapi_ticket); configData.SetValue("noncestr", nonceStr); configData.SetValue("timestamp", timestamp); configData.SetValue("url", $"https://www.yuming.com.cn/auth.aspx?code={jsCode}&state=STATE"); string sha1sign = configData.SHA1Sign(); var jsBridge = new { msg = "200", appId = WechatJSAPIConfig.appid, timeStamp = timestamp, nonceStr = nonceStr, sha1sign = sha1sign }; string jsApiData = JsonConvert.SerializeObject(jsBridge); context.Response.Write(jsApiData); }