.Net 微信开发与微信支付

.NET        

https://github.com/JeffreySu/WeiXinMPSDK     

JAVA     

http://git.oschina.net/pyinjava/fastweixin     

NodeJS     

https://github.com/node-weixin/node-weixin-api     

Python     

http://git.oschina.net/jeffkit/wechat

 

微信消息配置

已.NET 为例子,WeiXinMPSDK支持公众号与企业号,实现起来也比较简单

复制代码
    /// <summary>
    /// 微信控制器
    /// </summary> public class WeixinController : Controller { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public readonly string token = DbSetting.getAppText("Token"); public readonly string appId = DbSetting.getAppText("AppID"); public readonly string encodingAESKey = DbSetting.getAppText("EncodingAESKey"); /// <summary> /// 微信验签 /// </summary> /// <param name="signature"></param> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <param name="echostr"></param> /// <returns></returns>  [HttpGet] public async Task<ActionResult> Index(string signature, string timestamp, string nonce, string echostr) { return await Task.Run(() => { if (!CheckSignature.Check(signature, timestamp, nonce, token)) { return "failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, token) + "。如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。"; } return echostr; }).ContinueWith(task => Content(task.Result)); } /// <summary> /// 处理微信消息 /// </summary> /// <param name="postModel">参数</param> /// <returns></returns>  [HttpPost] public async Task<ActionResult> Index(PostModel postModel) { return await Task.Run<ActionResult>(() =>
            {
                if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, token))
                {
                    return new WeixinResult("参数错误!"); } postModel.Token = token; postModel.EncodingAESKey = encodingAESKey; postModel.AppId = appId; var messageHandler = new MpWeixinMessageHandler(Request.InputStream, postModel); messageHandler.Execute(); return new FixWeixinBugWeixinResult(messageHandler); }).ContinueWith(task => task.Result); } }
复制代码

消息重载

复制代码
    /// <summary>
    /// 处理微信消息 
    /// </summary> public class MpWeixinMessageHandler : MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>> { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public readonly string appId = DbSetting.getAppText("AppID"); public readonly string appSecret = DbSetting.getAppText("AppSecret"); /// <summary> /// 构造函数 /// </summary> /// <param name="inputStream"></param> /// <param name="postModel"></param> public MpWeixinMessageHandler(Stream inputStream, PostModel postModel) : base(inputStream, postModel) { WeixinContext.ExpireMinutes = 5; } /// <summary> /// 默认消息 [没有重写的OnXX方法,将默认返回DefaultResponseMessage中的结果] /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage) { //ResponseMessageText也可以是News等其他类型 var responseMessage = this.CreateResponseMessage<ResponseMessageText>(); responseMessage.Content = "这条消息来自DefaultResponseMessage。"; return responseMessage; } /// <summary> /// 关注微信公众号 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); var token = CommonApi.GetToken(appId, appSecret).access_token; var user = CommonApi.GetUserInfo(token, requestMessage.FromUserName); responseMessage.Content = "Hi " + user.nickname + " ,感谢您关注XXX!!!"; return responseMessage; } /// <summary> /// 取消关注公众号 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage) { return base.OnEvent_UnsubscribeRequest(requestMessage); } /// <summary> /// 发送文本消息 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageText>(requestMessage); responseMessage.Content = "感谢您关注XXX!!! "; return responseMessage; } }
复制代码

微信支付签名

复制代码
#region 创建订单与生成微信支付 JSAPPI 签名
        /// <summary>
        /// 创建订单与生成微信支付 JSAPPI 签名
        /// </summary> /// <param name="create">订餐参数</param> /// <returns></returns>  [HttpPost] public async Task<ActionResult> Create(Create create) { try { logger.Info("orders create xml: " + create.ToXml()); if (!ModelState.IsValid) return Json(new { IsError = true, ErrorMsg = "创建订单参数异常!!!", Data = string.Empty }, JsonRequestBehavior.AllowGet); //取购物车缓存 var cart = CacheManger.Cache.Get<CartInfoModel>(create.OpenId); if (cart.IsNull() || cart.ShopId.IsNullOrEmpty() || cart.OpenID.IsNullOrEmpty() || cart.OpenID != create.OpenId || cart.CartItemList.IsNull() || cart.CartItemList.Count == 0) return Json(new { IsError = true, ErrorMsg = "创建订单参数异常!!!", Data = string.Empty }, JsonRequestBehavior.AllowGet); //控制库存与订单事物 using (var conn = new SqlConnection(DbSetting.App)) { await conn.OpenAsync(); var trans = conn.BeginTransaction(); //验证价格及库存[重要] //创建订单 string subject = @"xxx支付"; string orderNo = WxPayConfig.OutTradeNo; //!!! 1分钱测试 !!! decimal total_fee = 0.01m; var executeNum = await conn.ExecuteAsync(@"INSERT INTO Orders ( Origin, ShopId, OpenId, Name, PhoneNo, [Subject], OrderNo, [Status], TotalFee, Coupon, Memo, CreateTime ) VALUES ( @Origin, @ShopId, @OpenId, @Name, @PhoneNo, @Subject, @OrderNo, @Status, @TotalFee, @Coupon, @Memo, @CreateTime )", new { Origin = AbpConstants.WEIXIN_ORIGIN, OpenId = create.OpenId, ShopId = Guid.Parse(cart.ShopId), Name = create.UserName, PhoneNo = create.Phone, Subject = subject, OrderNo = orderNo, Status = "R", TotalFee = cart.TotalPrice, Coupon = "0", Memo = string.Empty, CreateTime = DateTime.Now }, trans); if (executeNum <= 0) { trans.Rollback(); return Json(new { IsError = true, ErrorMsg = "创建订单异常!!!", Data = string.Empty }, JsonRequestBehavior.AllowGet); } foreach (var item in cart.CartItemList.Where(t => t.CartNum != 0)) { executeNum = conn.Execute(@"INSERT INTO OrderDetail ( OrderId, ItemId, ItemName, Num, UnitPrice, TotalFee ) VALUES ( @OrderId, @ItemId, @ItemName, @Num, @UnitPrice, @TotalFee )", new { OrderId = orderNo, ItemId = item.ItemId, ItemName = item.ItemName, Num = item.CartNum, UnitPrice = item.Price, TotalFee = item.Price * item.CartNum }, trans); if (executeNum <= 0) { trans.Rollback(); return Json(new { IsError = true, ErrorMsg = "创建订单明细异常!!!", Data = string.Empty }, JsonRequestBehavior.AllowGet); } } //提交事物  trans.Commit(); var wxpay = await Order(WxPayConfig.APPID, create.OpenId, WxPayConfig.MCHID, orderNo, total_fee, WxPayConfig.NonceStr, subject, "没有优惠券", "XXX"); if (wxpay.IsError) { return Redirect(DbSetting.getAppText("Domain") + @"/oauth/1"); } var jsApiDict = new SortedDictionary<string, string>(); jsApiDict.Add("appId", appId); jsApiDict.Add("timeStamp", WxPayConfig.TimeStamp); jsApiDict.Add("nonceStr", WxPayConfig.NonceStr); jsApiDict.Add("package", "prepay_id=" + (wxpay.Data as SortedDictionary<string, string>)["prepay_id"]); jsApiDict.Add("signType", "MD5"); jsApiDict.Add("paySign", WxPayConfig.GenerateSign(jsApiDict)); return Json(new { IsError = false, ErrorMsg = string.Empty, Data = jsApiDict.ConvertDictionaryToJson() }, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { logger.Info("orders create xml: " + create.ToXml() + " exception message: " + ex.Message); return Json(new { IsError = true, ErrorMsg = "创建订单异常!!!", Data = string.Empty }, JsonRequestBehavior.AllowGet); } } #endregion #region 微信支付签名 /// <summary> /// 微信支付签名 /// </summary> /// <param name="appid">公众账号ID</param> /// <param name="openid">微信唯一标识</param> /// <param name="mch_id">

转载于:https://www.cnblogs.com/MuNet/p/5896513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET微信支付是一种在ASP.NET网站中集成微信支付功能的方式。微信支付是由中国著名的社交平台微信开发的一种在线支付服务,可以在移动端和网页端完成支付操作。 在ASP.NET中实现微信支付,首先需要引入微信支付的相关SDK和API,并进行配置。然后,在网站开发中添加支付功能的代码逻辑,包括生成订单、调用微信支付接口进行支付、处理支付结果回调等。在用户进行支付时,可以通过扫描二维码、点击支付链接或调起微信APP等方式完成支付流程。 ASP.NET提供了丰富而强大的开发工具和功能,可以方便地与微信支付进行集成。可以使用ASP.NET的控件和组件来设计网页界面,以展示支付相关信息和操作界面。同时,ASP.NET的数据处理能力可以用来保存用户支付记录和订单信息,方便后续的查询和管理。 在进行ASP.NET微信支付的开发过程中,需要注意安全性和可靠性。确保支付接口的调用参数和返回结果的正确性,防止信息泄漏和支付风险。此外,还需要与微信支付官方保持紧密的联系,及时了解和更新支付接口的变化,以保持支付功能的顺利运行。 ASP.NET微信支付的实现可以为商家和用户提供便捷、安全的支付方式,推动电子商务和移动支付的发展。同时,对于开发者而言,ASP.NET微信支付也是一项有挑战性和有价值的技术实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值