返回顶部
首页 > 资讯 > 前端开发 > html >微信JSAPI支付操作需要注意的细节有哪些
  • 399
分享到

微信JSAPI支付操作需要注意的细节有哪些

2024-04-02 19:04:59 399人浏览 八月长安
摘要

这篇文章主要为大家展示了“微信jsapi支付操作需要注意的细节有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信JSAPI支付操作需要注意的细节有哪些”这

这篇文章主要为大家展示了“微信jsapi支付操作需要注意的细节有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信JSAPI支付操作需要注意的细节有哪些”这篇文章吧。

首先介绍一下我在调用微信支付接口使用的是 weixin.senparc SDK,非常方便好用开源的一个微信开发SDK。

weixin.senparc SDK 官网:Http://weixin.senparc.com/

先去下载下来Senparc.Weixin SDK。

在调起支付接口之前,需要先要调用统一下单接口,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付。

 微信 JsApi支付 在这个目录下 Senparc.Weixin.MP.Sample.Controllers 找到JsApi支付。

public ActionResult JsApi(string code, string state)
  {
   if (string.IsNullOrEmpty(code))
   {
    return Content("您拒绝了授权!");
   }

   if (!state.Contains("|"))
   {
    //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下
    //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证
    return Content("验证失败!请从正规途径进入!1001");
   }
   try
   {


    //获取产品信息
    var stateData = state.Split('|');
    int productId = 0;
    ProductModel product = null;
    if (int.TryParse(stateData[0], out productId))
    {
     int hc = 0;
     if (int.TryParse(stateData[1], out hc))
     {
      var products = ProductModel.GetFakeProductList();
      product = products.FirstOrDefault(z => z.Id == productId);
      if (product == null || product.GetHashCode() != hc)
      {
       return Content("商品信息不存在,或非法进入!1002");
      }
      ViewData["product"] = product;
     }
    }

    //通过,用code换取access_token
    var openIdResult = OAuthApi.GetAccessToken(TenPayV3Info.AppId, TenPayV3Info.AppSecret, code);
    if (openIdResult.errcode != ReturnCode.请求成功)
    {
     return Content("错误:" + openIdResult.errmsg);
    }

    string sp_billno = Request["order_no"];
    if (string.IsNullOrEmpty(sp_billno))
    {
     //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
     sp_billno = string.FORMat("{0}{1}{2}", TenPayV3Info.MchId, DateTime.Now.ToString("yyyyMMdd"),
      TenPayV3Util.BuildRandomStr(10));
    }
    else
    {
     sp_billno = Request["order_no"];
    }

    var timeStamp = TenPayV3Util.GetTimestamp();
    var nonceStr = TenPayV3Util.GetNoncestr();

    var body = product == null ? "test" : product.Name;
    var price = product == null ? 100 : product.Price * 100;
    var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, Request.UserHostAddress, TenPayV3Info.TenPayV3Notify, TenPayV3Type.JSAPI, openIdResult.openid, TenPayV3Info.Key, nonceStr);
    var result = TenPayV3.Unifiedorder(xmlDataInfo);//调用统一订单接口

    //JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);
    var package = string.Format("prepay_id={0}", result.prepay_id);

    ViewData["appId"] = TenPayV3Info.AppId;
    ViewData["timeStamp"] = timeStamp;
    ViewData["nonceStr"] = nonceStr;
    ViewData["package"] = package;
    ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

    return View();
   }
   catch (Exception ex)
   {
    var msg = ex.Message;
    msg += "<br>" + ex.StackTrace;
    msg += "<br>==Source==<br>" + ex.Source;

    if (ex.InnerException != null)
    {
     msg += "<br>===InnerException===<br>" + ex.InnerException.Message;
    }
    return Content(msg);
   }
  }

先在微信服务后台生成预支付交易单,获得预支付订单号。

先说说在统一下单这里遇到的坑。 

1.在统一下单的时候解析返回结果,一直出现以下问题:您没有JSAPI支付权限

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[您没有JSAPI支付权限]]></return_msg>
</xml>

1)先看看你的公众号微信支付设置是否正确。

关于如何配置微信支付:可以参考这个 http://jingyan.baidu.com/article/77b8dc7fef360d6174eab690.html

2)检查你的授权目录是否正确,格式要这样,后面记得别漏了一个/   例如:http://test.cn/u/

3)检查需要传过去的账户参数,上公众号还有商户号检查你的账户参数是否正确。我在开发当中就出现,微信公众号商户号,appid 是分别不同两个公众号的,坑啊,找了好久,觉得不对劲,原来是给的配置参数密钥不对。

 这里详细说一下对应的参数:

MCHID:商户号(必须配置,开户邮件中可查看),商户申请微信支付后,由微信支付分配的商户收款账号。
APPID:微信开放平台审核通过的应用APPID,appid是微信公众账号或开放平台APP的唯一标识,在公众平台申请公众账号或者在开放平台申请APP账号后,微信会自动分配对应的appid用于标识该应用。可在微信公众平台-->开发者中心查看,商户的微信支付审核通过邮件中也会包含该字段值.

KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置),交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播。商户妥善保管该Key,切勿在网络中传输,不能在其他客户端中存储,保证key不会被泄漏。商户可根据邮件提示登录微信商户平台进行设置。也可按一下路径设置:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置.
APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置)

 2.在统一下单,解析返回来的结果我出现了商户号mch_id与appid不匹配这个问题

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[商户号mch_id与appid不匹配]]></return_msg>
</xml>

原因是我拿到的商户号不是这个公众号的。一定要检查是不是这个公众号的商户号。

 3.在统一下单,解析返回来的结果出现 appid and openid not match,appid和openid不匹配。

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[appid and openid not match]]></return_msg>
</xml>

原因是我这个用户的openid 不是这个公众号的 

4.在统一下单,解析返回来的结果出现 CDATA[openid is invalid],openid无效

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[openid is invalid]]></return_msg>
</xml>

原因是,传过去不是有效的opendid。不小心看错了,把用户id 当做openid传过去了。

当统一下单成功,会返回以下格式的参数

<xml>
 <return_code><![CDATA[SUCCESS]]></return_code>
 <return_msg><![CDATA[OK]]></return_msg>
 <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
 <mch_id><![CDATA[10000100]]></mch_id>
 <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
 <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
 <result_code><![CDATA[SUCCESS]]></result_code>
 <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
 <trade_type><![CDATA[APP]]></trade_type>
</xml>

解析获得预支付单号:

string prepayId = res.Element("xml").Element("prepay_id").Value; //获取预支付订单号

给页面对应地参数

 ViewData["appId"] = TenPayV3Info.AppId;
    ViewData["timeStamp"] = timeStamp;
    ViewData["nonceStr"] = nonceStr;
    ViewData["package"] = package;
    ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

静态页面js调用:

wx.chooseWXPay({
 timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
 nonceStr: '', // 支付签名随机串,不长于 32 位
 package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
 signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
 paySign: '', // 支付签名
 success: function (res) {
  if (res.err_msg == "get_brand_wcpay_request:ok") {//支付成功
 
  } else {
   //支付失败

  }
  // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
 }
});

以上是“微信JSAPI支付操作需要注意的细节有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网html频道!

--结束END--

本文标题: 微信JSAPI支付操作需要注意的细节有哪些

本文链接: https://lsjlt.com/news/78990.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微信JSAPI支付操作需要注意的细节有哪些
    这篇文章主要为大家展示了“微信JSAPI支付操作需要注意的细节有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信JSAPI支付操作需要注意的细节有哪些”这...
    99+
    2024-04-02
  • Javascript中需要注意的细节有哪些
    这篇文章主要介绍了Javascript中需要注意的细节有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.使用 === 代替 ==Jav...
    99+
    2024-04-02
  • Web测试中需要注意的细节有哪些
    这篇文章主要介绍了Web测试中需要注意的细节有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Web测试中需要注意的细节有哪些文章都会有所收获,下面我们一起来看看吧。页面显示部分(1)首先关注页面是否能显示完...
    99+
    2023-06-05
  • 网站优化需要注意的细节有哪些
    这篇文章主要介绍“网站优化需要注意的细节有哪些”,在日常操作中,相信很多人在网站优化需要注意的细节有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”网站优化需要注意的细节有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-13
  • 微信小程序开店需要注意什么细节
    这篇文章主要介绍“微信小程序开店需要注意什么细节”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序开店需要注意什么细节”文章能帮助大家解决问题。  1、页面美化设计  在微信小程序开店的过程中...
    99+
    2023-06-26
  • 优化网站需要注意哪些细节
    这篇文章将为大家详细讲解有关优化网站需要注意哪些细节,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  在网站搭建初期就完成所有便于优化的框架和内容能够缩短整个网站优化时间,一个完整的便于优化的网站包含:满...
    99+
    2023-06-10
  • 个人注册域名需要注意哪些细节
    个人注册域名需要注意以下几点细节:如果是做博客,域名选择跟产品服务相关的简短域名,方便用户记忆。域名统一格式,用英文字母就只用英文字母,不要与数字混合,避免出现杂乱感。选择优质域名服务商,能够确保域名出问题时,第一时间解决问题。必需提供真实...
    99+
    2024-04-02
  • 新网站建设前需要注意的细节有哪些
    本篇内容介绍了“新网站建设前需要注意的细节有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!    ...
    99+
    2023-06-10
  • Motorola J2ME开发时需要注意哪些细节
    这期内容当中小编将会给大家带来有关Motorola J2ME开发时需要注意哪些细节,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在实际开发MOTO的产品的时候,会遇到一些...
    99+
    2024-04-02
  • 服务器托管需要注意哪些细节
    这篇文章主要讲解了“服务器托管需要注意哪些细节”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“服务器托管需要注意哪些细节”吧!服务器托管要注意哪些细节首先,大家都知道选择服务器机房位置的不同,...
    99+
    2023-06-07
  • 构建移动网站时有哪些需要注意的细节要点
    这篇文章主要讲解了“构建移动网站时有哪些需要注意的细节要点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“构建移动网站时有哪些需要注意的细节要点”吧!  近年来,移动互联网发展极为迅速,根据有...
    99+
    2023-06-10
  • MySQL数值类型在binlog中需要注意的细节有哪些
    MySQL数值类型在binlog中需要注意的细节有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。     ...
    99+
    2024-04-02
  • 微信小程序开发需要注意事项有哪些
    这篇“微信小程序开发需要注意事项有哪些”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“微信小程序开发需要注意事项有哪些”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下...
    99+
    2023-06-26
  • 网站建设时需要注意哪些优化细节
    这期内容当中小编将会给大家带来有关网站建设时需要注意哪些优化细节,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、制定合理的title标签:对于搜索引擎而言,在分析网页结构时对于title标签的重要性是不...
    99+
    2023-06-07
  • 微信分销小程序系统开发需要注意什么细节
    今天小编给大家分享一下微信分销小程序系统开发需要注意什么细节的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。  1、结合商品定...
    99+
    2023-06-26
  • 使用香港服务器IP需要注意哪些细节
    使用香港服务器IP需要注意的细节有:1、香港服务器IP会影响网站优化;2、香港服务器可以广播世界各地的IP;3、使用香港服务器IP会被攻击,需要对其进行保护;4、IP会被屏蔽,如果服务器的IP被屏蔽,则会对网站带来很大影响。具体内容如下:I...
    99+
    2024-04-02
  • Go API 文件编程算法需要注意哪些细节?
    Go语言是一种非常流行的编程语言,它的简洁性和高效性使得它成为了许多开发者的首选语言。在Go语言中,API文件编程算法是一种非常常见的编程方式,可以帮助开发者轻松地构建高效、可靠的API。然而,在实现API文件编程算法时,需要注意一些细节,...
    99+
    2023-06-24
    api 文件 编程算法
  • 美国服务器租用需要注意的操作有哪些
    美国服务器租用需要注意的操作:1. 不要轻易修改防火墙设置操作,有需要可以让机房技术人员操作处理。2. 禁止在服务器上进行网卡禁用操作,可以让技术人员解决问题。3. 交付美国服务器后要第一时间进行密码修改。4. 不要在服务器上浏览网页或者运...
    99+
    2024-04-02
  • html制作需要注意的问题有哪些
    这篇文章主要介绍“html制作需要注意的问题有哪些”,在日常操作中,相信很多人在html制作需要注意的问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html制作需要注意的问题有哪些”的疑惑有所帮助!...
    99+
    2023-06-08
  • 微信小程序开发中需要注意哪些坑
    这篇文章主要介绍了微信小程序开发中需要注意哪些坑,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。“免费”易中坑现在随便在互联网平台搜索小程序开发都有需要打着免费开发的旗号来吸引...
    99+
    2023-06-27
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作