error Code:410 Error Message:appid and openid not match 威富通技术支持,兴业银行微信支付接入支持
2015-10-22 15:50
465 查看
error Code:410 Error Message:appid and openid not match
----------------------------------------------------------------------------------
代理商给的资料
公众号支付流程是先调用接口文档
6.1一节初始化请求接口获取到相应的返回值token_id和pay_info
(关于这两个返回参数的说明,请求参数中传了is_raw这个参数,并且值为1才返回pay_info,否则只会返回token_id),
返回参数按 XML 的格式示例如下图,图中是请求参数中有is_raw的情况下,pay_info(对应的值是json格式字符串)参数和token_id参数都返回了
然后下一个步骤分为了两个不同的模式:6.2一节原生态js支付和6.3一节公众账号JS支付
6.2一节原生态js支付
调用微信jspai方法,此方法只能在微信内置浏览器调用,在其他浏览器中无效,示例如下(注:示例代码中appId这六个参数有大小写,对应的值就是初始化请求接口中返回参数pay_info的值):
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',{
"appId": "wx1111111", //公众号名称,由商户传入
"timeStamp":"1468591622013", //时间戳,自1970 年以来的秒数
"nonceStr": "1468591622013", //随机串
"package": "prepay_id=wx201607152207013ae4e376760784153308",
"signType": "MD5", //微信签名方式:
"paySign": "111111111111111" //微信签名,
},function(res){
if(res.err_msg== "get_brand_wcpay_request:ok" ) {
//此处可以使用此方式判断前端返回,微信团队郑重提示:res.err_msg 将在用户支付成功后返回ok,但并不保证它绝对可靠,。
document.location.href="pay_success.jsp";
}
/*for(var i in res){
alert(res[i]);
}*/
}
);
}
最后在网页代码里调用这个js方法就可调起微信支付比如:
<buttontype="button" onclick="jsApiCall()" >微信支付</button>
但想正常弹出支付密码框,商户方开发人员必须提供自己的支付授权目录由服务商配置好,支付授权目录即为jspai方法代码所在页面的文件路径,如http://xxxx.com/zhifu/jsapi.html,授权目录就是http://xxxx.com/zhifu/(如果没有配置授权目录的话,支付时会无法弹出密码框或者提示当前页面URL未注册)
效果如图
6.3一节公众账号JS支付
这种模式是由我们进行了封装,用6.1一节初始化请求接口获取到的token_id值组装成https://pay.swiftpass.cn/pay/jspay?token_id=1315838a57d0c83df0b62816220da070&showwxtitle=1这样的链接在手机微信中调起支付(用户点击页面中的微信支付按钮时实际上就是点击的这个链接,可以将链接放在手机微信文件传输助手去点击测试,注意token_id的值要更换有效的),这种模式不用实现jsapi方法,也不要提供支付授权目录
效果如下图:
对比6.2一节原生态js支付,直接点击链接的这个形式在支付弹出确认支付的弹出框时会多一个上面绿色下面白色背景页面,
实际上这个背景页面是我们封装好的支付授权目录页面
(对应固定的授权目录https://pay.swiftpass.cn/pay/),
这也是不用商户提供支付授权目录的原因所在。
总的来说,封装的链接形式开发时简单些,且无需商户提供自己的授权目录(由我们固定配置https://pay.swiftpass.cn/pay/),但体验可能没有原生态js支付好,商户可以自行决定最终使用哪种。
------------- 原生----------------------------------------------------------------------
原因
需要改成 对应的微信公众号 授权的网址
================================
Error Code:410 Error Message:sub_appid and sub_openid not match
原因:每个用户关注某个公众号的是固定唯一的,但是关注不同公众号是不一样的
-------------------not match的几种情况---------- 版权所有绍兴远帆软件有限公司 ---------------
1 .使用测试商户号和商户自己公会号的用户openid对接了
2 正式商户没有上传sub_openid
3 微信服务商后台里子商户appid配置,没有配置商户的公会号appid
4 公众号和微信支付主体一致的问题
5 公众号更换之后,原来的公众号openid保存在数据中导致 新的公会号openid不对
6 $this->resHandler->getParameter(); 里面用了 $_POST 函数里不要用$_POST 因为要重新处理数据
7
/*********** 重要说明 ****************/
// 网页授权获取用户openid 注意这里的openid 威富通集成方案的话 用的是 snsapi_userinfo
// 而微信通用的openid snsapi_base 导致 sub_openid not matched
/*********** 重要说明 ****************/
8 免费开通威富通 兴业银行一码支付 公会号支付 联系方式 qq 346767073
______________________________ 版权所有绍兴远帆软件有限公司 _________________
----------------------------------------------------------------------------------
代理商给的资料
公众号支付流程是先调用接口文档
6.1一节初始化请求接口获取到相应的返回值token_id和pay_info
(关于这两个返回参数的说明,请求参数中传了is_raw这个参数,并且值为1才返回pay_info,否则只会返回token_id),
返回参数按 XML 的格式示例如下图,图中是请求参数中有is_raw的情况下,pay_info(对应的值是json格式字符串)参数和token_id参数都返回了
然后下一个步骤分为了两个不同的模式:6.2一节原生态js支付和6.3一节公众账号JS支付
6.2一节原生态js支付
调用微信jspai方法,此方法只能在微信内置浏览器调用,在其他浏览器中无效,示例如下(注:示例代码中appId这六个参数有大小写,对应的值就是初始化请求接口中返回参数pay_info的值):
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',{
"appId": "wx1111111", //公众号名称,由商户传入
"timeStamp":"1468591622013", //时间戳,自1970 年以来的秒数
"nonceStr": "1468591622013", //随机串
"package": "prepay_id=wx201607152207013ae4e376760784153308",
"signType": "MD5", //微信签名方式:
"paySign": "111111111111111" //微信签名,
},function(res){
if(res.err_msg== "get_brand_wcpay_request:ok" ) {
//此处可以使用此方式判断前端返回,微信团队郑重提示:res.err_msg 将在用户支付成功后返回ok,但并不保证它绝对可靠,。
document.location.href="pay_success.jsp";
}
/*for(var i in res){
alert(res[i]);
}*/
}
);
}
最后在网页代码里调用这个js方法就可调起微信支付比如:
<buttontype="button" onclick="jsApiCall()" >微信支付</button>
但想正常弹出支付密码框,商户方开发人员必须提供自己的支付授权目录由服务商配置好,支付授权目录即为jspai方法代码所在页面的文件路径,如http://xxxx.com/zhifu/jsapi.html,授权目录就是http://xxxx.com/zhifu/(如果没有配置授权目录的话,支付时会无法弹出密码框或者提示当前页面URL未注册)
效果如图
6.3一节公众账号JS支付
这种模式是由我们进行了封装,用6.1一节初始化请求接口获取到的token_id值组装成https://pay.swiftpass.cn/pay/jspay?token_id=1315838a57d0c83df0b62816220da070&showwxtitle=1这样的链接在手机微信中调起支付(用户点击页面中的微信支付按钮时实际上就是点击的这个链接,可以将链接放在手机微信文件传输助手去点击测试,注意token_id的值要更换有效的),这种模式不用实现jsapi方法,也不要提供支付授权目录
效果如下图:
对比6.2一节原生态js支付,直接点击链接的这个形式在支付弹出确认支付的弹出框时会多一个上面绿色下面白色背景页面,
实际上这个背景页面是我们封装好的支付授权目录页面
(对应固定的授权目录https://pay.swiftpass.cn/pay/),
这也是不用商户提供支付授权目录的原因所在。
总的来说,封装的链接形式开发时简单些,且无需商户提供自己的授权目录(由我们固定配置https://pay.swiftpass.cn/pay/),但体验可能没有原生态js支付好,商户可以自行决定最终使用哪种。
------------- 原生----------------------------------------------------------------------
<xml><attach><![CDATA[附加信息]]></attach><body><![CDATA[测试购买商品]]></body><callback_url><![CDATA[http://www.swiftpass.cn]]></callback_url><mch_create_ip><![CDATA[127.0.0.1]]></mch_create_ip><mch_id><![CDATA[5731550002]]></mch_id><nonce_str><![CDATA[1445439734]]></nonce_str><notify_url><![CDATA[http://zhangwei.dev.swiftpass.cn/payInterface/request.php?method=callback]]></notify_url><openid><![CDATA[oblXsw3FUjA7iNQAkwyvEC582ou4]]></openid><out_trade_no><![CDATA[492039801132483]]></out_trade_no><service><![CDATA[pay.weixin.jspay]]></service><total_fee><![CDATA[1]]></total_fee><version><![CDATA[1.0]]></version><sign><![CDATA[BA9ED117A006F5D38961322C6D404D4D]]></sign></xml>
原因
callback_url
notify_url
需要改成 对应的微信公众号 授权的网址
================================
Error Code:410 Error Message:sub_appid and sub_openid not match
原因:每个用户关注某个公众号的是固定唯一的,但是关注不同公众号是不一样的
-------------------not match的几种情况---------- 版权所有绍兴远帆软件有限公司 ---------------
1 .使用测试商户号和商户自己公会号的用户openid对接了
2 正式商户没有上传sub_openid
3 微信服务商后台里子商户appid配置,没有配置商户的公会号appid
4 公众号和微信支付主体一致的问题
5 公众号更换之后,原来的公众号openid保存在数据中导致 新的公会号openid不对
6 $this->resHandler->getParameter(); 里面用了 $_POST 函数里不要用$_POST 因为要重新处理数据
7
/*********** 重要说明 ****************/
// 网页授权获取用户openid 注意这里的openid 威富通集成方案的话 用的是 snsapi_userinfo
// 而微信通用的openid snsapi_base 导致 sub_openid not matched
/*********** 重要说明 ****************/
8 免费开通威富通 兴业银行一码支付 公会号支付 联系方式 qq 346767073
______________________________ 版权所有绍兴远帆软件有限公司 _________________
相关文章推荐
- android基类Adapter
- iOS 如何学习新技术
- cordova SplashScreen插件在android上退出app后不再显示启动画面的问题
- Android Studio 导入 Gradle 项目
- iOS真机调试
- Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
- android调试各种bug
- 获取unity当前版本号
- Android APK反编译就这么简单 详解(附图)
- 【android】解码混淆过的堆栈跟踪信息
- iOS根据屏幕宽高判断当前设备型号
- CreateFileMapping/OpenFileMapping/MapViewOfFile
- 最容易理解的Android计算器实现
- Android 常用工具函数
- # android中dp与px的相互转换工具方法
- Android 自定义 斜线进度框 ,雨点式背景
- 【扣丁学堂】Apple Watch心率监测竟然如此恐怖
- 微信支付与分享
- Android用ImageView显示本地和网上的图片
- 【iOS】Swift类的继承、构造方法、析构器等复习