mvc 微信公众号支付
来源:互联网 发布:用的什么java工具 编辑:程序博客网 时间:2024/06/05 14:16
公众号支付具体流程和安装都不说了,大家都可以去看文档,具体代码实现,页面因为是例子就一个按钮
微信回调也是这个页面
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width" /> <title>微信支付</title></head><body> <div class="line"> <input type="button" class="btn" value="立即充值" onclick="fCharge()" style="margin-top: 20px;" /> </div> <script src="~/Scripts/jquery-1.7.1.intellisense.js"></script> <script src="~/Scripts/jquery-1.7.1.js"></script> <script src="~/Scripts/jquery-1.7.1.min.js"></script> <script type="text/javascript"> $(function () { var vCode = getQueryString("code"); if (vCode != "" && vCode != null) { //alert(vCode); $.ajax({ type: 'post', data: { code: vCode }, url: '/WeiChat/getWxInfo', success: function (sjson) { alert(sjson); var vData = JSON.stringify(sjson); alert(vData); } }) } else { $.ajax({ type: 'post', url: '/WeiChat/getCode', success: function (sjson) { //alert(sjson); location.href = sjson; } }) } }) //获取url的参数 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } //初始化微信支付环境 function fCharge() { if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } else { fPostCharge(); } } //提交充值数据 function fPostCharge() { $.ajax({ type: "post", data: "totalfee=1", url: "/WeiChat/WeChat_Wap", success: function (json) { console.log(json); var jsnStr = JSON.parse(json); onBridgeReady(jsnStr); }, error: function () { alert("提示", '调用微信支付模块失败,请稍后再试。', 'info') } }) } //调用微信支付模块 function onBridgeReady(json) { WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId": json.appId, //公众号名称,由商户传入 "timeStamp": json.timeStamp, //时间戳,自1970年以来的秒数 "nonceStr": json.nonceStr, //随机串 "package": json.package, "signType": "MD5", //微信签名方式: "paySign": json.paySign //微信签名 }, function (res) { if (res.err_msg == "get_brand_wcpay_request:ok") { alert("支付成功,请稍后查询余额,如有疑问,请联系管理员."); fAlreadyPay(); } // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。 } ); } </script></body></html>控制器
using LitJson;using Smile.Framework.Tools;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using System.Web.Mvc;using WxPayAPI.lib;namespace WxPayAPI.Controllers{ public class WeiChatController : Controller { JsApiPay jsApiPay = new JsApiPay(); #region 视图页面 /// <summary> /// 微信支付页面 /// </summary> /// <returns></returns> public ActionResult WeChat() { if (Session["openid"] == null) { try { GetOpenidAndAccessToken(); } catch (Exception ex) { } } return View(); } #endregion #region 20170330 gaosheng 微信支付 /** //* 网页授权获取用户基本信息的全部过程 //* 详情请参看网页授权获取用户基本信息:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html //* 第一步:利用url跳转获取code //* 第二步:利用code去获取openid和access_token //*/ public void GetOpenidAndAccessToken() { if (Session["code"] != null) { //获取code码,以获取openid和access_token string code = Session["code"].ToString(); Log.Debug(this.GetType().ToString(), "Get code : " + code); jsApiPay.GetOpenidAndAccessTokenFromCode(code); } else { //构造网页授权获取code的URL string host = Request.Url.Host; string path = Request.Path; string redirect_uri = HttpUtility.UrlEncode(WxPayConfig.NOTIFY_URL); //string redirect_uri = HttpUtility.UrlEncode("http://gzh.lmx.ren"); 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"); string url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + data.ToUrl(); Log.Debug(this.GetType().ToString(), "Will Redirect to URL : " + url); Session["url"] = url; } } /// <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); } /// <summary> /// 通过code换取网页授权access_token和openid的返回数据 /// </summary> /// <returns></returns> [HttpPost] public ActionResult getWxInfo() { object objResult = ""; string strCode = Request.Form["code"]; JsonData jd = null; if (Session["access_token"] == null || Session["openid"] == null) { jd= jsApiPay.GetOpenidAndAccessTokenFromCode(strCode); Session["access_token"] = jd["access_token"]; Session["openid"] = jd["openid"]; } string strAccess_Token = Session["access_token"].ToString(); string strOpenid = Session["openid"].ToString(); objResult = new { openid = strOpenid, access_token = strAccess_Token }; return Json(objResult); } /// <summary> /// 点击支付进入,对微信端进行下单 /// </summary> /// <param name="id"></param> /// <param name="return_url"></param> /// <returns></returns> public ActionResult WeChat_Wap() { try { //T_Order order = null; //var orderid = Base64Help.base64ToString(id); //var OrderBll = new T_OrderManager(); //var exist = OrderBll.ExistOrder(orderid, out order); //if (!exist) //{ // throw new Exception("缺少需要验证支付状态的必要条件"); //} //if (order.OrderType != (int)OrderTypeEnum.Create) //{ // throw new Exception("订单支付类型错误"); //} //if (order.OrderState == (int)OrderStateEnum.Successful) //{ // return Json("订单已支付,请勿重复提交"); //} //生成订单号 //OrderBll.UpdateOrderNumber(orderid, out order); //调用手机网站支付接口 //SetAliPay_Wap(order.OrderNumber, return_url); var model = SetWeChat_Wap().ToJson().Replace("\\", ""); return Json(model); } catch (Exception ex) { return Json(""); } } /// <summary> /// 调用微信下单接口 返回调微信支付的参数 /// </summary> /// <param name="no">订单编号</param> private WxPayData SetWeChat_Wap() { #region 返回调用app接口的参数 Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing..."); string strAccess_Token = Session["access_token"].ToString(); string strOpenid = Session["openid"].ToString(); WxPayData data = new WxPayData(); data.SetValue("body", "测试商品数据");//商品描述 data.SetValue("attach", "test");//附加数据 data.SetValue("out_trade_no", "123456");//随机字符串 data.SetValue("total_fee", Convert.ToInt32(0.01 * 100));//总金额 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间 data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间 data.SetValue("goods_tag", "自学检测付费订单");//商品标记 data.SetValue("trade_type", "JSAPI");//交易类型 data.SetValue("product_id", "a11878d2-2c35-49fb-a31f-9d9e922af32e");//商品ID data.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//异步通知地址 data.SetValue("openid", strAccess_Token);//异步通知地址 //data.SetValue("access_token", strOpenid);//异步通知地址 WxPayData result = WxPayApi.UnifiedOrder(data); //调用统一下单接口 string prepayid = result.GetValue("prepay_id").ToString(); //获得统一下单接口返回的支付交易会话ID TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); data = new WxPayData(); //调App接口参数 data.SetValue("appId", WxPayConfig.APPID);//公众账号ID //data.SetValue("partnerid", WxPayConfig.MCHID);//商户号 data.SetValue("package", "prepay_id="+ prepayid);//支付交易会话ID data.SetValue("nonceStr", WxPayApi.GenerateNonceStr());//随机字符串 //data.SetValue("package", "Sign=WXPay");//扩展字段 data.SetValue("timeStamp", timestamp);//时间戳 data.SetValue("signType", "MD5");//签名 data.SetValue("paySign", data.MakeSign());//签名 return data; //调用app接口参数 #endregion } #endregion } }可以给微信的例子下下来,对于我们小白来说看看根据例子改改,加上页面与控制器就可以了
最后记得给控制器路径加入到微信支付授权目录的白名单,在手机上测试就可以啦
阅读全文
0 0
- mvc 微信公众号支付
- 微信公众号扫码支付 spring mvc
- 微信公众号支付
- 微信公众号支付
- 微信公众号支付
- 微信公众号支付
- 微信公众号支付
- 微信公众号支付
- 微信公众号支付
- 支付--微信公众号
- 微信公众号支付。
- 微信公众号支付
- 微信公众号支付
- 微信公众号支付
- 微信支付之公众号支付
- 微信支付(公众号支付)
- 微信支付之公众号支付
- 微信支付之公众号支付
- 来电闪关灯闪烁功能
- android 购物车的实现
- 几种常见的设计模式
- Java获取本地服务器Ip的方法
- Hibernate之one2one主键关联
- mvc 微信公众号支付
- 结合P2P软件使用Ansible分发大文件
- Spring Bean的管理
- HTML5权威指南笔记:14-其他表单元素及输入验证
- mysql帐号管理
- Nginx+RTMP 搭建视频点播服务器
- 简单的telnet使用性不介绍理论
- 架构师必看:微服务架构综述
- Source Insight 4.0,solarized-dark配色主题展示