c#发起微信支付

举报
清雨小竹 发表于 2022/09/25 01:54:47 2022/09/25
【摘要】 1.项目引用 Senparc.Weixin.TenPay 2.服务端代码 using Senparc.Weixin.TenPay;using Senparc.Weixin.TenPay.V3;using System;using System.Collections.Generic;using System.Linq;us...

1.项目引用 Senparc.Weixin.TenPay

2.服务端代码


  
  1. using Senparc.Weixin.TenPay;
  2. using Senparc.Weixin.TenPay.V3;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Web;
  7. using System.Web.Mvc;
  8. namespace zzzili
  9. {
  10. public class WXPay
  11. {
  12. /// <summary>
  13. ///
  14. /// </summary>
  15. /// <param name="appId">appid</param>
  16. /// <param name="mchId">商户id</param>
  17. /// <param name="body">商品描述</param>
  18. /// <param name="outTradeNo">第三方订单号</param>
  19. /// <param name="totalFee">总金额分</param>
  20. /// <param name="spbillCreateIp">客户端ip</param>
  21. /// <param name="notifyUrl">通知地址</param>
  22. /// <param name="openid">用户openid</param>
  23. /// <param name="key">商户API密钥</param>
  24. /// <returns></returns>
  25. public static Dictionary<string, object> startPay(string appId, string mchId, string body, string outTradeNo, int totalFee, string spbillCreateIp, string notifyUrl, string openid, string key)
  26. {
  27. var timeStamp = TenPayV3Util.GetTimestamp();//时间戳
  28. var nonceStr = TenPayV3Util.GetNoncestr();//随机字符串
  29. TenPayV3UnifiedorderRequestData tenPayV3 = new TenPayV3UnifiedorderRequestData(appId, mchId, body, outTradeNo, totalFee, spbillCreateIp, notifyUrl, Senparc.Weixin.TenPay.TenPayV3Type.JSAPI, openid, key, nonceStr);
  30. //提交支付接口
  31. UnifiedorderResult result = TenPayV3.Unifiedorder(tenPayV3);
  32. string package = "prepay_id=" + result.prepay_id;
  33. Dictionary<string, object> payEntity = new Dictionary<string, object>();
  34. payEntity.Add("timeStamp", timeStamp);
  35. payEntity.Add("nonceStr", nonceStr);
  36. payEntity.Add("package", package);
  37. payEntity.Add("signType", "MD5");
  38. payEntity.Add("paySign", TenPayV3.GetJsPaySign(appId, timeStamp, nonceStr, package, key, "MD5"));
  39. return payEntity;
  40. }
  41. }
  42. }

3.小程序端代码


  
  1. wx.requestPayment({
  2. "timeStamp": res.data.Data.timeStamp,
  3. "nonceStr": res.data.Data.nonceStr,
  4. "package": res.data.Data.package,
  5. "signType": res.data.Data.signType,
  6. "paySign": res.data.Data.paySign,
  7. "success": function(res) {
  8. console.log(res);
  9. },
  10. "fail": function(res) {
  11. console.log(res);
  12. },
  13. "complete": function(res) {
  14. console.log(res);
  15. }
  16. });

3.支付结果通知


  
  1. [HttpGet]
  2. [HttpPost]
  3. public string paynotify()
  4. {
  5. try
  6. {
  7. YFLog.logInfo("PayNotify==========================start");
  8. ResponseHandler resHandler = new ResponseHandler(HttpContext.Current);
  9. string return_code = resHandler.GetParameter("return_code");
  10. string return_msg = resHandler.GetParameter("return_msg");
  11. resHandler.SetKey(wx_key);//商户APIkey
  12. if (resHandler.IsTenpaySign() && return_code.ToUpper() == "SUCCESS")
  13. {
  14. //直到这里,才能认为交易真正成功了,可以进行数据库操作,但是别忘了返回规定格式的消息!
  15. string out_trade_no = resHandler.GetParameter("out_trade_no");
  16. string transaction_id = resHandler.GetParameter("transaction_id");
  17. string total_fee = resHandler.GetParameter("total_fee");
  18. YFLog.logInfo("PayNotifyUrl回调", "支付成功");
  19. }
  20. else
  21. {
  22. YFLog.logInfo("PayNotifyUrl回调", "支付失败");
  23. }
  24. return string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg);
  25. }
  26. catch (Exception ex)
  27. {
  28. YFLog.logInfo(ex.Message);
  29. throw;
  30. }
  31. }

 

文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。

原文链接:zzzili.blog.csdn.net/article/details/114631519

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。