微信支付调用JS-API接口支付的问题

qq_37057775 2017-02-28 10:47:39
先从官网下载的这个JS-SDK微信支付示例ASP.NET版:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

在使用这个接口的时候出现问题:
jsApiPay.GetOpenidAndAccessToken();
代码段如下:

JsApiPay jsApiPay = new JsApiPay(this);
try
{
//调用【网页授权获取用户信息】接口获取用户的openid和access_token
jsApiPay.GetOpenidAndAccessToken();

//获取收货地址js函数入口参数
wxEditAddrParam = jsApiPay.GetEditAddressParameters();
Session["openid"] = jsApiPay.openid;
Response.Write("openid:" + jsApiPay.openid);
}
catch (Exception ex)
{
Response.Write("<span style='color:#FF0000;font-size:15px'>" + "页面加载出错,请重试" + "</span>");
}


错误提示:输入字符串的格式不正确。


各项参数上都检查过,AppID、SecretKey、支付Key没有问题。
...全文
767 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37057775 2017-03-01
  • 打赏
  • 举报
回复
也谢谢@sp1234 的关注与谆谆教诲,在调用微信API方面本人通过论坛的探讨、交流获益良多,此致谢意!
qq_37057775 2017-03-01
  • 打赏
  • 举报
回复
引用
你在提交订单的支付信息时,有一个 packageReqHandler.SetParameter("notify_url", CallbackUrl); //接收财付通通知的URL 你看看,这CallbackUrl就是支付成功后,他会按照你给他的地址,提交支付信息给你。 类似于 Http://www....../payResult 去接受他给你的信息
@hanjun0612 很感谢您的指导,我已经找到了配置路径。关于调用JS-API支付接口的初步阶段的问题如10楼描述,虽然能成功调用网页用户授权获取OpenID和Access_Token,但是发现了在.NET后台程序处理后出现了“输入的字符串有误”的异常。 与之前调用接口的代码没有放在Page_Load事件中一样,我将跳转地址改为另一个页面仍然出现这样的异常。 我尽可能的把调试、修改的过程描述出来,确实没法通过VS本地调试定位问题。
qq_37057775 2017-03-01
  • 打赏
  • 举报
回复
引用
你在提交订单的支付信息时,有一个 packageReqHandler.SetParameter("notify_url", CallbackUrl); //接收财付通通知的URL 你看看,这CallbackUrl就是支付成功后,他会按照你给他的地址,提交支付信息给你。 类似于 Http://www....../payResult 去接受他给你的信息
能看一下在这里是什么问题吗?我在Page_Load中调用JS-API接口成功了,但是在转入一个登录页面login.aspx输入用户名密码点击登录按钮之后,使用Response.Redirect("Index.aspx",true);跳转回原来的首页就又提示“输入的字符串有误”。 登录按钮事件后台代码:

//添加Session
                        Session["Vip"] = ds.Tables[0].Rows[0]["Accname"].ToString();
                        Session["VipId"] = ds.Tables[0].Rows[0]["Id"].ToString();
                        Session.Timeout = 600;
                         
                         //将OpenID存入用户信息中
                        if (ds.Tables[0].Rows[0]["Openid"].ToString() == "" && Session["Openid"] != null && Session["Openid"].ToString() != "")
                        {
                            Bll.InsertVipOpenid(Convert.ToInt32(Session["VipId"].ToString()), Session["Openid"].ToString());
                        }
 
 
                        //获取用户的角色
                        string userdata = txtUserName.Text;
 
                        // 创建身份验证票证
                        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(360), true, userdata);
                        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                         
                        // 创建Cookie
                        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                        Response.Cookies.Remove("authCookie");
                        Response.Cookies.Add(authCookie);
 
                        //Response.Write(Context.User.Identity.Name);
 
                        //将用户重定向到最初请求页面。
                        Response.Redirect("Index.aspx",true);
将Response.Redirect("Index.aspx",true);改为Response.Redirect("publish.aspx"); 换一个页面跳转也是出现同样的错误。 上述调试都只能通过官方提供的微信web开发者工具,所以没法定位问题出在哪。
qq_37057775 2017-03-01
  • 打赏
  • 举报
回复
经过反复调试,终于查明原因了! 在调用JS-API函数获取OpenID后,跳转到Login.aspx页面,点击登录按钮时,执行实例化业务类的方法会抛出异常。 问题是如何能够不使其发生异常,执行相关的业务类的方法。
qq_36815975 2017-03-01
  • 打赏
  • 举报
回复
在后台程序调用GetOpenidAndAccessToken通过code换取网页授权access_token和openid的返回数据之后, 应该对这个返回的Json数据包作怎样的处理? 有什么方法能够对Json数据包作出处理,使其不影响后面的跳转页面的事件如OnClick?
正怒月神 版主 2017-02-28
  • 打赏
  • 举报
回复
如果jsApiPay.GetOpenidAndAccessToken();出的这个问题 那么,你查看JsApiPay jsApiPay = new JsApiPay(this); 有没有源码例子来对照你的this信息。看看是否一致
  • 打赏
  • 举报
回复
人家的 GetOpenidAndAccessToken 是源代码,你的 try...catch 让你丧失了调试能力,从来不接触源代码,连出错了都不去看。
  • 打赏
  • 举报
回复
不要 try...catch。 如果你连那一条代码出错都不知道、都不能让调试器直接定位在出错语句而进入调试,你只会在 catch 里边抱怨一个“结果”,那么还怎么从事开发工作?永远不知道去调试出错的那条语句。
正怒月神 版主 2017-02-28
  • 打赏
  • 举报
回复
引用 6 楼 qq_37057775 的回复:
[quote=引用 2 楼 sp1234 的回复:] 人家的 GetOpenidAndAccessToken 是源代码,你的 try...catch 让你丧失了调试能力,从来不接触源代码,连出错了都不去看。
已经解决之前的问题,现在想问清楚调用微信JS api 支付下单成功之后,应该怎么接收微信服务器的返回状态值,判断是订单支付成功或者失败?[/quote]
引用 6 楼 qq_37057775 的回复:
[quote=引用 2 楼 sp1234 的回复:] 人家的 GetOpenidAndAccessToken 是源代码,你的 try...catch 让你丧失了调试能力,从来不接触源代码,连出错了都不去看。
已经解决之前的问题,现在想问清楚调用微信JS api 支付下单成功之后,应该怎么接收微信服务器的返回状态值,判断是订单支付成功或者失败?[/quote] 你在提交订单的支付信息时,有一个 packageReqHandler.SetParameter("notify_url", CallbackUrl); //接收财付通通知的URL 你看看,这CallbackUrl就是支付成功后,他会按照你给他的地址,提交支付信息给你。 类似于 Http://www....../payResult 去接受他给你的信息
qq_37057775 2017-02-28
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
不要 try...catch。 如果你连那一条代码出错都不知道、都不能让调试器直接定位在出错语句而进入调试,你只会在 catch 里边抱怨一个“结果”,那么还怎么从事开发工作?永远不知道去调试出错的那条语句。
之前的那个问题,我在Page_Load中调用JS-API接口成功了,但是在转入一个登录页面之后,使用Response.Redirect("Index.aspx",true);跳转回原来的首页就又提示“输入的字符串有误”。 附上后台代码:

                      //添加Session
                        Session["Vip"] = ds.Tables[0].Rows[0]["Accname"].ToString();
                        Session["VipId"] = ds.Tables[0].Rows[0]["Id"].ToString();
                        Session.Timeout = 600;
                        
                         //将OpenID存入用户信息中
                        if (ds.Tables[0].Rows[0]["Openid"].ToString() == "" && Session["Openid"] != null && Session["Openid"].ToString() != "")
                        {
                            Bll.InsertVipOpenid(Convert.ToInt32(Session["VipId"].ToString()), Session["Openid"].ToString());
                        }


                        //获取用户的角色
                        string userdata = txtUserName.Text;

                        // 创建身份验证票证
                        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(360), true, userdata);
                        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                        
                        // 创建Cookie
                        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                        Response.Cookies.Remove("authCookie");
                        Response.Cookies.Add(authCookie);

                        //Response.Write(Context.User.Identity.Name);

                        //将用户重定向到最初请求页面。
                        Response.Redirect("Index.aspx",true);
  • 打赏
  • 举报
回复
官网没有接口说明吗?
qq_37057775 2017-02-28
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
人家的 GetOpenidAndAccessToken 是源代码,你的 try...catch 让你丧失了调试能力,从来不接触源代码,连出错了都不去看。
已经解决之前的问题,现在想问清楚调用微信JS api 支付下单成功之后,应该怎么接收微信服务器的返回状态值,判断是订单支付成功或者失败?
qq_37057775 2017-02-28
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
如果jsApiPay.GetOpenidAndAccessToken();出的这个问题 那么,你查看JsApiPay jsApiPay = new JsApiPay(this); 有没有源码例子来对照你的this信息。看看是否一致
对照源码示例,就是发现多了一行调用函数的语句。 Log.Info(this.GetType().ToString(), "page load"); 是写入日志文件的。这个示例是微信支付官网下载的,有各种接口的示例,其中就用到了这一调用JS-SDK的示例。 官网示例中的这段代码是写在Page_Load中,我写在了一个按钮点击事件的判断条件代码段中,这是否是出错的原因?
qq_37057775 2017-02-28
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
人家的 GetOpenidAndAccessToken 是源代码,你的 try...catch 让你丧失了调试能力,从来不接触源代码,连出错了都不去看。
我是在微信开发者工具上测试的,这个必须使用微信浏览器才能测试,确实也曾不用try...catch,但是本地调试是被拒绝访问微信支付API接口的。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧