微信微信网页版扫一扫登录网页错误

18458人阅读
& & & & 最近在做在做微信支付中的native支付第二种支付方式,在请求参数时遇到了最大的问题就是,body(商品描述)为中文时,签名失败,为英文时签名成功。这个问题搞了好几天,没有搞定,今天终于搞定了,特此分享一哈。
其实就是一句话的问题: &把我们生成的xml请求参数转为字节数组后,用“ISO8859-1”编码格式进行编码为字符串,就可以解决问题了。
return new String(sb2.toString().getBytes(), &ISO8859-1&);
=============================================================================================================
上面的已经可以解决问题。下面我只是说说更详细的解决步骤。
1. 首先我们来看看官方的接口文档:
认证方式:HTTPS讣证,退款和冲正接口调用需要商户证书(证书在审核邮件附件
请求采用POST方式&
提交和返回结果采用XML格式&
字符集默讣使用UTF-8,请勿使用其它字符集&
商户不微信之间的交互(特别是Native回调和支付通知回调),都需要验证签名&
4.1.统一支付接口&
URL地址:https://api.mch./pay/unifiedorder&
统一支付接口,可接叐JSAPI/NATIVE/APP下预支付订单,返回预支付订单号。&
NATIVE支付返回二维码code_url。&
注意:JSAPI 下单前需要调用登录授权接口(详细调用说明请点击打开链接)获叏到用户
的Openid。
我们只需要传递对应的参数,请求“https://api.mch./pay/unifiedorder&”,把得到“code_url”生成二维码即可。
2. &定义个常量类用来存储请求值
我定义了一常量类,保存我们用到的参数值(这只是我的Demo,不是真实中的项目,所以这么用,真实中不能这么弄,这个在真实中最好有服务器端操作,我们需要的只是一个&code_url&而已)。
* 请求需要的参数
* @author Administrator
public class Constans {
public static String APPID = &wxd930ea5d5a258f4f&;
public static String auth_code = genNonceStr();
public static String body = &霸气的小明(qiwenming)&;
public static String device_info = &1000&;
public static String mch_id = &&;
public static String nonce_str = genNonceStr();
public static String out_trade_no = genNonceStr();
public static String spbill_create_ip = &127.0.0.1&;
public static String notify_url = &&;
public static String total_fee = &1&;
public static String trade_type = &NATIVE&;
public static String private_key = &53e9cf7b0519d&;
public static String key = &L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K&;
//请求地址
public static String url=&https://api.mch./pay/unifiedorder&;
//生成随机字符串
private static String genNonceStr() {
Random random = new Random();
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());
3.我们组织参数,生成请求参数(XML格式 )&
&这里分为2步:
& 第一步,我们把请求参数,按字典顺序存入到一个集合中;
& 第二步,我们把这些参数组装为xml格式的数据,并且完成签名的过程,这一步中最关键的是 我们要把生成的xml字符串,转为字节后,在使用“Isolates859-1”编码重新编码为字符串。
&3.1按字典顺序存入到一个集合中:
&span style=&font-size:18&&&strong&
&/span&&span style=&font-size:14&& /**
* 把一个参数添加到 一个集合中,按字典顺序,这是为了后面生成 签名方便
private String genProductArgs() {
List&NameValuePair& packageParams = new LinkedList&NameValuePair&();
packageParams.add(new BasicNameValuePair(&appid&, Constans.APPID));
packageParams.add(new BasicNameValuePair(&appkey&, Constans.key));
packageParams.add(new BasicNameValuePair(&body&, Constans.body));
packageParams.add(new BasicNameValuePair(&input_charset&, &UTF-8&));
packageParams.add(new BasicNameValuePair(&mch_id&, Constans.mch_id));
packageParams.add(new BasicNameValuePair(&nonce_str&,
Constans.nonce_str));
packageParams.add(new BasicNameValuePair(&notify_url&,
packageParams.add(new BasicNameValuePair(&out_trade_no&,
Constans.out_trade_no));
packageParams.add(new BasicNameValuePair(&spbill_create_ip&,
Constans.spbill_create_ip));
packageParams.add(new BasicNameValuePair(&total_fee&, Constans.total_fee));
packageParams.add(new BasicNameValuePair(&trade_type&,
Constans.trade_type));
//调用genXml()方法获得xml格式的请求数据
return genXml(packageParams);
}&/span&&span style=&font-size:18&&
3.2生成XML格式参数,注意转码:
* 生成xml格式的请求参数
* @param params
private String genXml(List&NameValuePair& params) {
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
sb2.append(&&?xml version='1.0' encoding='UTF-8' standalone='yes' ?&&xml&&);
for (int i = 0; i & params.size(); i++) {
// sb是用来计算签名的
sb.append(params.get(i).getName());
sb.append('=');
sb.append(params.get(i).getValue());
sb.append('&');
// sb2是用来做请求的xml参数
sb2.append(&&& + params.get(i).getName() + &&&);
sb2.append(params.get(i).getValue());
sb2.append(&&/& + params.get(i).getName() + &&&);
sb.append(&key=&);
sb.append(Constans.private_key);
String packageSign =
// 生成签名
packageSign = MD5.getMessageDigest(sb.toString().getBytes())
.toUpperCase();
sb2.append(&&sign&&![CDATA[&);
sb2.append(packageSign);
sb2.append(&]]&&/sign&&);
sb2.append(&&/xml&&);
// 这一步最关键 我们把字符转为 字节后,再使用“ISO8859-1”进行编码,得到“ISO8859-1”的字符串
return new String(sb2.toString().getBytes(), &ISO8859-1&);
} catch (Exception e) {
e.printStackTrace();
return &&;
4.请求数据,把得到的code_url生成二维码&
* 获得 code_url地址,生成二维码
* @author qiwenming
class GetCodeUrl {
public void get() {
String url = Constans.
String entity = genProductArgs();
Log.d(&URL&, &url-----------:& + url);
Log.d(TAG, & entity----------: & + entity);
HttpUtils http = new HttpUtils();
RequestParams params = new RequestParams();
params.setBodyEntity(new StringEntity(entity));
http.send(HttpMethod.POST, url, params,
new RequestCallBack&String&() {
public void onSuccess(ResponseInfo&String& res) {
Log.i(TAG, res.result);
ResultXmlbean beanxml = Util.XmlToBean(res.result);
if (beanxml.getResult_code() == beanxml.getReturn_code()
&& beanxml.getResult_code().equals(&SUCCESS&)) {
//请求成功后,获得的code_url生成二维码
int QR_WIDTH = 300, QR_HEIGHT = 300;
//调用工具类生成二维码
Bitmap bitmap = ZxingUtils.createQRImage(beanxml.getCode_url(), QR_WIDTH,QR_HEIGHT);
Log.i(TAG, &####code_url##
&+beanxml.getCode_url());
//设置二维码
iv_QRcode.setImageBitmap(bitmap);
Toast.makeText(getApplicationContext(),
&error&, 0).show();
public void onFailure(HttpException arg0,
String arg1) {
Log.d(TAG, arg0.toString()+&--#####---&+arg1);
Log.d(TAG,&请求失败。。。。。。。。&);
} catch (Exception e) {
e.printStackTrace();
以上已经解决了签名错误的问题,下面只是展示而已。
==================================================================
生成的二维码图片:
使用微信扫描的结果(微信中:发现---&扫一扫):
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24106次
排名:千里之外
原创:16篇
评论:24条
(1)(2)(2)(1)(5)(3)(2)最全、最好用微信浏览器JS API合集!!! - 推酷
最全、最好用微信浏览器JS API合集!!!
本帖最后由 印道子 于
12:02 编辑
寻找了多少次,终于发现它了,感谢网友的贡献,在此也分享给大家,查看附件~微信公众平台Js API(WeixinApi)
WeixinApi-master.zip (10.42 KB, 下载次数: 10)
微信公众平台Js API(WeixinApi) 1、API能实现什么? 1、分享到微信朋友圈 2、分享给微信好友 3、分享到腾讯微博 4、新的分享接口,包含朋友圈、好友、微博的分享(for iOS) 5、隐藏/显示右上角的菜单入口 6、隐藏/显示底部浏览器工具栏 7、获取当前的网络状态 8、调起微信客户端的图片播放组件 9、关闭公众平台Web页面 10、判断当前网页是否在微信内置浏览器中打开 11、增加打开扫描二维码 12、支持WeixinApi的错误监控 13、检测应用程序是否已经安装(需要官方开通权限) 你可以用微信的“扫一扫”来打开下面这个二维码体验一把:
Weixin Api Demo 2、如何使用? 使用起来比较简单,具体可参考demo.html中的实现
1)、初始化等待分享
// 开发阶段,开启WeixinApi的调试模式
WeixinApi.enableDebugMode();
// 初始化WeixinApi,等待分享
WeixinApi.ready(function(Api) {
// 微信分享的数据
var wxData = {
&appId&: &&, // 服务号可以填写appId
&imgUrl& : '/fe/blog/static/img/weixin-qrcode-2.jpg',
&link& : '',
&desc& : '大家好,我是Alien,Web前端&Android客户端码农,喜欢技术上的瞎倒腾!欢迎多交流',
&title& : &大家好,我是赵先烈&
// 分享的回调
var wxCallbacks = {
// 分享操作开始之前
ready : function() {
// 你可以在这里对分享的数据进行重组
alert(&准备分享&);
// 分享被用户自动取消
cancel : function(resp) {
// 你可以在你的页面上给用户一个小Tip,为什么要取消呢?
alert(&分享被取消,msg=& + resp.err_msg);
// 分享失败了
fail : function(resp) {
// 分享失败了,是不是可以告诉用户:不要紧,可能是网络问题,一会儿再试试?
alert(&分享失败,msg=& + resp.err_msg);
// 分享成功
confirm : function(resp) {
// 分享成功了,我们是不是可以做一些分享统计呢?
alert(&分享成功,msg=& + resp.err_msg);
// 整个分享过程结束
all : function(resp,shareTo) {
// 如果你做的是一个鼓励用户进行分享的产品,在这里是不是可以给用户一些反馈了?
alert(&分享& + (shareTo ? &到& + shareTo : &&) + &结束,msg=& + resp.err_msg);
// 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码
Api.shareToFriend(wxData, wxCallbacks);
// 点击分享到朋友圈,会执行下面这个代码
Api.shareToTimeline(wxData, wxCallbacks);
// 点击分享到腾讯微博,会执行下面这个代码
Api.shareToWeibo(wxData, wxCallbacks);
// iOS上,可以直接调用这个API进行分享,一句话搞定
Api.generalShare(wxData,wxCallbacks);
}); 可能有的朋友不知道appId从哪儿获取,请看这里:如何获取appId
2)、隐藏右上角option menu入口
WeixinApi.ready(function(Api) {
Api.hideOptionMenu();
// Api.showOptionMenu();
3)、隐藏底部工具栏
WeixinApi.ready(function(Api) {
Api.hideToolbar();
// Api.showToolbar();
4)、获取当前的网络类型
WeixinApi.ready(function(Api) {
Api.getNetworkType(function(network){
* network取值:
* network_type:wifi
* network_type:edge
非wifi,包含3G/2G
* network_type:fail
网络断开连接
* network_type:wwan
5)、调起客户端图片播放组件
WeixinApi.ready(function(Api) {
// 需要播放的图片src list
var srcList = [src1, src2, ..., srcN];
// 选一个作为当前需要展示的图片src
var curSrc = src1;
Api.imagePreview(curSrc, srcList);
}); 调起客户端图片播放组件,还有一种更屌的方法,不需要依赖这个WeixinApi,直接a标签实现就行,具体格式: &a href=&weixin://viewimage/`YourImageURL`&&AnyThing&/a& 我们可以用A标签来嵌套这个img,具体Demo如下: &a href=&weixin://viewimage//img/bdlogo.gif&&
&img src=&/img/bdlogo.gif&&
&a href=&weixin://viewimage//tb/static-common/img/search_logo_big_6a13b553.gif&&
&img src=&/tb/static-common/img/search_logo_big_6a13b553.gif&&
6)、关掉当前微信公众页面窗口
WeixinApi.ready(function(Api) {
// 关闭窗口
WeixinApi.closeWindow({
success : function(resp){
alert('关闭窗口成功!');
fail : function(resp){
alert('关闭窗口失败');
}); 7)、判断当前网页是否在微信内置浏览器中打开 WeixinApi.ready(function(Api) {
// true or false
var flag = Api.openInWeixin();
8)、打开扫描二维码
WeixinApi.ready(function(Api) {
// 扫描二维码
WeixinApi.scanQRCode({
success : function(resp){
alert('扫描器已打开!');
fail : function(resp){
alert('扫描器无法打开');
9)、开启WeixinApi的错误监控
注意,这句代码务必放在WeixinApi.ready之前;上线的时候,根据实际需要,可删掉它 // 方法1:不带任何参数,将以alert方式提示出错信息
WeixinApi.enableDebugMode();
// 方法2:给一个callback,自己处理错误信息
WeixinApi.enableDebugMode(function(errObj){
// errObj = {
message : errorMessage,
script : scriptURI,
line : lineNumber,
column : columnNumber
}); // 当然,你还可以做一件事:把这些错误信息上报到服务器 3、其他
详细的使用场景,可以到这里获取:
注意:这只是发烧版本,非微信官方出品!有问题可大家一起来讨论,我很乐意与大家一起来完善这个API。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致有关百度一键分享链接到微信朋友圈无法打开网页,报404错误的解决办法,from=timeline&isappinstalled=0,和伪静态规则有关 - 华源茂业专注于中小企业低成本电商运营方案
华源茂业官网
有关百度一键分享链接到微信朋友圈无法打开网页,报404错误的解决办法,from=timeline&isappinstalled=0,和伪静态规则有关
发布时间: 20:09:42&&&阅读:8879
最近有好友反映用百度一键分享,分享网页链接到微信朋友圈的时候,发现链接无法打开,提示无法找到该页404错误,同样分享到QQ、微博等链接&
能正常访问,这么明显的错误,百度和腾讯应该不会忽略吧。接报后,我专门分析了一遍他公司的网站,确实是微信朋友圈无法分享网站链接。但是通过微信扫一扫能正常浏览网页,点击分享到朋友圈后,在 从朋友圈去访问的时候,提示无法找到该页,报404错误。经反复检测,排除了分享代码的问题,和服务器配置问题。我开始怀疑伪静态规则,开启URL重写造成的,我关掉了伪静态,让网页形成动态链接, 微信朋友圈分享正常显示,无报错。最后发现问题所在了,我们来对比下分享的网址:分享到QQ空间:/article/15.html#0-qzone-1-d2a4e8d1a374a433f596ad1440分享给QQ好友:/article/15.html#0-sqq-1-f9e09dfaf5d3fd14d775bfee85分享到微信朋友圈:/article/15.html?from=timeline&isappinstalled=0这样一对比问题就明显了,伪静态规则问题,前面能正常访问的地址后面都是#开始跟统计代码的,微信是?开始跟进的,试着把?改成#能正常访 问链接,哈哈。知道问题所在就好办了,修改伪静态规则,在伪静态规则里面加上 (.*) 就可以了,也就是 在静态网址结束后 html 后面加上(.*) 即可。如:RewriteRule ^article/(.+).html(.*)$ article.php?name=$1 [L]RewriteRule ^product/(.+).html(.*)$ product.php?name=$1 [L]至此问题解决!
版权所有 (C) 2012 - 2015 深圳市华源茂业科技有限公司
地址:深圳市龙华新区华宁路厦门大学龙华产学研基地608&&&服务热线:5&& &&&Email:
9:00-22:00(工作日)
扫一扫关注华源茂业您所在的位置: &
微信登陆显示“系统错误,请重试” 微信登陆不了解决办法
编辑:sheng
来源:下载吧
阅读2392次
微信登陆显示“系统错误,请重试” &微信登陆不了解决办法。不知道刚才怎么了,在登陆微信时提示“系统错误,请重试”这是怎么回事呢?之前还是好好的,下文就让小编跟大家讲讲怎么微信登陆显示“系统错误,请重试”是怎么回事,跟解决办法。微信登陆显示“系统错误,请重试”:今日下午14时许,微信用户陆续发现微信退出不能登陆故障。15时左右,微信提示,“微信功能故障,部分功能暂不可用,正在修复中,请稍后再试”。提示“系统错误,请重试”是微信方面的问题。因为:目前微信正在进行修复,还没部分地区没有恢复,请耐心等待。该故障已经持续超过1小时,同时新浪微博上也有大量用户报告微信无法登录的状况,截至发稿时,该问题依然没有被修复。微信回应称,现在还在了解情况,暂时不知道故障原因。
微信登陆显示“系统错误相关软件
微信登陆显示“系统错误相关教程
微信登陆显示“系统错误相关新闻
微信使用教程之使用问题汇总
微信使用教程之微信怎么玩
热门关键字
扫红码得红包5亿红包100%中奖}

我要回帖

更多关于 微信网页扫一扫 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信