百度地图错误码
Android
错误码 | 错误描述 |
---|---|
AMBIGUOUS_KEYWORD | 检索词有岐义 |
AMBIGUOUS_ROURE_ADDR | 检索地址有岐义 |
KEY_ERROR | key有误 |
NETWORK_ERROR | 网络错误 |
NETWORK_TIME_OUT | 网络超时 |
NO_ERROR | 检索结果正常返回 |
NOT_SUPPORT_BUS | 该城市不支持公交搜索 |
NOT_SUPPORT_BUS_2CITY | 不支持跨城市公交 |
PERMISSION_UNFINISHED | 授权未完成 |
RESULT_NOT_FOUND | 没有找到检索结果 |
ST_EN_TOO_NEAR | 起终点太近 |
iOS
错误码 | 错误描述 |
---|---|
1 | 检索词有岐义 |
2 | 检索地址有岐义 |
3 | 该城市不支持公交搜索 |
4 | 不支持跨城市公交 |
5 | 没有找到检索结果 |
6 | 起终点太近 |
7 | key错误 |
8 | 网络连接错误 |
9 | 网络连接超时 |
10 | 还未完成鉴权,请在鉴权通过后重试 |
授权类错误请参考:
http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=42223&page=1&extra=
http://developer.baidu.com/map/index.php?title=lbscloud/api/appendix
Android
错误码 | 错误描述 |
---|---|
AMBIGUOUS_KEYWORD | 检索词有岐义 |
AMBIGUOUS_ROURE_ADDR | 检索地址有岐义 |
KEY_ERROR | key有误 |
NETWORK_ERROR | 网络错误 |
NETWORK_TIME_OUT | 网络超时 |
NO_ERROR | 检索结果正常返回 |
NOT_SUPPORT_BUS | 该城市不支持公交搜索 |
NOT_SUPPORT_BUS_2CITY | 不支持跨城市公交 |
PERMISSION_UNFINISHED | 授权未完成 |
RESULT_NOT_FOUND | 没有找到检索结果 |
ST_EN_TOO_NEAR | 起终点太近 |
iOS
错误码 | 错误描述 |
---|---|
1 | 检索词有岐义 |
2 | 检索地址有岐义 |
3 | 该城市不支持公交搜索 |
4 | 不支持跨城市公交 |
5 | 没有找到检索结果 |
6 | 起终点太近 |
7 | key错误 |
8 | 网络连接错误 |
9 | 网络连接超时 |
10 | 还未完成鉴权,请在鉴权通过后重试 |
授权类错误请参考:
http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=42223&page=1&extra=
http://developer.baidu.com/map/index.php?title=lbscloud/api/appendix
5+App模块配置错误处理
HBuilder6.2.0+版本及HBuilderX中包含模块自动检测提示功能,提示开发者避免遗漏配置模块导致功能无法使用。
uni-app项目请参考新文档:https://uniapp.dcloud.net.cn/tutorial/app-modules.html
小程序SDK环境
如果您是原生工程集成小程序SDK,iOS 工程请参考这个 教程,Android 工程请参考这个 教程 ,不用看下面的教程;
App离线打包环境
如果您是离线工程打包App,iOS 工程请参考这个教程 ,Android 工程参考这个 教程,不用看下面的教程;
使用 HBuilderX 云打包请继续看下面的教程
缺失模块提醒框
当应用中调用5+ API对应的模块在5+ Runtime中不包含时弹出标题为“HTML5+ Runtime”提示框:
-
HBuilder|HBuilderX真机运行
提示内容为“manifest.json中未添加XXX模块,请参考http://ask.dcloud.net.cn/article/283”
其中XXX表示缺失的模块,如图:
-
App打包运行
提示内容为“打包时未添加XXX模块,请参考http://ask.dcloud.net.cn/article/283”
其中XXX表示缺失的模块,如图:
IDE中添加模块
解决此问题的方法是在HBuilder|HBuiulderX中添加缺失的模块,保存后提交App云端打包。
打开应用的manifest.json文件,切换到“模块权限配置”项(uni-app应用为“App模块权限配置”项),在右侧的“打包模块配置”中x勾选缺失的模块:
如果这些模块涉及三方sdk配置,还需要继续配sdk信息
比如map,勾选map模块后,仍需在sdk配置中选择是高德地图还是百度地图,并填写相关appkey信息。
如果是离线打包请参考离线打包配置教程
HBuilder6.2.0+版本及HBuilderX中包含模块自动检测提示功能,提示开发者避免遗漏配置模块导致功能无法使用。
uni-app项目请参考新文档:https://uniapp.dcloud.net.cn/tutorial/app-modules.html
小程序SDK环境
如果您是原生工程集成小程序SDK,iOS 工程请参考这个 教程,Android 工程请参考这个 教程 ,不用看下面的教程;
App离线打包环境
如果您是离线工程打包App,iOS 工程请参考这个教程 ,Android 工程参考这个 教程,不用看下面的教程;
使用 HBuilderX 云打包请继续看下面的教程
缺失模块提醒框
当应用中调用5+ API对应的模块在5+ Runtime中不包含时弹出标题为“HTML5+ Runtime”提示框:
-
HBuilder|HBuilderX真机运行
提示内容为“manifest.json中未添加XXX模块,请参考http://ask.dcloud.net.cn/article/283”
其中XXX表示缺失的模块,如图:
-
App打包运行
提示内容为“打包时未添加XXX模块,请参考http://ask.dcloud.net.cn/article/283”
其中XXX表示缺失的模块,如图:
IDE中添加模块
解决此问题的方法是在HBuilder|HBuiulderX中添加缺失的模块,保存后提交App云端打包。
打开应用的manifest.json文件,切换到“模块权限配置”项(uni-app应用为“App模块权限配置”项),在右侧的“打包模块配置”中x勾选缺失的模块:
如果这些模块涉及三方sdk配置,还需要继续配sdk信息
比如map,勾选map模块后,仍需在sdk配置中选择是高德地图还是百度地图,并填写相关appkey信息。
如果是离线打包请参考离线打包配置教程
收起阅读 »5+API错误代码
5+ API通常通过错误回调(ErrorCallback)函数返回错误,并且在回调函数中包含Event错误信息:
interface Event {
readonly attribute Number code; // 错误码
readonly attribute String message; // 错误描述信息
}
- code 表示错误码,可以在下面列表中查询到对应的错误原因:
当code值为-100时,表示是使用第三方SDK时内部业务逻辑发生错误,此时需要查看message信息 - message 表示错误描述信息,用于提示用户错误原因,当code值为-100时错误描述信息的格式为:
[%模块名称%+%第三方SDK名称%: %第三方SDK错误码%]%错误描述信息%
如“[OAuth微信:-1]未知错误,...”
其中%第三方SDK错误码%参考:
通用错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1 | 参数错误 | 5+API传入的参数不正确 |
-2 | 用户取消 | 用户取消当前的操作 |
-3 | 此功能不支持 | 当前5+Runtime不支持此功能 |
-4 | 文件不存在 | 操作的文件或目录不存在 |
-5 | IO错误 | 文件读写操作错误,如文件被其它程序占用等 |
-6 | 网络错误 | 无法连接到网络 |
-7 | 业务参数配置缺失 | 使用第三方SDK时缺失SECRET、APPID、APPKEY等数据 |
-8 | 客户端未安装 | 调用的第三方客户端未安装 |
-9 | 快捷方式已存在 | 创建快捷方式时快捷方式已存在,仅部分手机支持 |
-10 | 授权失败 | 用户拒绝该API访问 |
-99 | 未知错误 | 未定义的错误 |
-100 | 业务内部错误 | 使用的第三方SDK内部错误 |
OAuth(登录授权)
错误码 | 错误描述 | 备注 |
---|---|---|
-1001 | 未登录或登录已注销 | |
-1002 | 获取Token失败 |
univerify(一键登录)
错误码 | 错误描述 |
---|---|
1000 | 当前 uniAppid 尚未开通一键登录 |
1001 | 应用所有者账号信息异常,请检查账号一键登录服务是否正常 |
1002 | 应用所有者账号信息异常,请检查账号余额是否充足 |
4001 | 请求参数异常 |
4003 | 开发者账户appid 校验异常,联系官方人员 |
5000 | 服务器未知异常,联系官方人员 |
30001 | 当前网络环境不适合执行该操作 |
30002 | 用户点击了其他登录方式 |
30003 | 用户关闭验证界面 |
30004 | 其他错误 |
30005 | 预登录失败 |
30006 | 一键登录失败 |
30007 | 获取本机号码校验token失败 |
40004 | 应用不存在 |
40047 | 一键登录取号失败 |
40053 | 手机号校验失败 |
40201 | 源IP鉴权失败 |
Runtime模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1201 | WGT/WGTU文件格式错误 | |
-1202 | WGT安装包中manifest.json文件不存在 | |
-1203 | WGT安装包中manifest.json文件格式错误 | |
-1204 | WGT安装包中manifest.json文件的appid不匹配 | |
-1205 | WGT安装包中manifest.json文件的version版本不匹配 | |
-1221 | WGTU安装包中update.xml文件不存在 | |
-1222 | WGTU安装包中update.xml文件格式错误 | |
-1223 | WGTU安装包中update.xml文件的appid不匹配 | |
-1224 | WGTU安装包中update.xml文件的version版本不匹配 | |
-1225 | WGTU安装包中www目录下manifest.json不存在 | |
-1226 | WGTU安装包中www目录下manifest.json文件格式错误 | |
-1227 | WGTU安装包中www目录下manifest.json文件的appid不匹配 | |
-1228 | WGTU安装包中www目录下manifest.json文件的version版本不匹配 | |
-1229 | HTML5+ Runtime缺少升级包manifest.json中配置的模块 | 这种情况下应该使用apk/ipa升级 |
-1250 | uni-app编译模式切换不支持升级应用资源 |
Audio模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1301 | 文件播放格式错误 | |
-1302 | 文件请求超时 |
Sqlite模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1401 | 数据库没有打开 | |
-1402 | 数据库已经打开 | |
-1403 | WWW目录下的数据库只有读权限 | |
-1404 | 其他错误 |
<a id="geolocation"/>
Geolocation模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1501 | 坐标地址解析失败 | |
-1502 | 坐标地址获取失败 | |
-1503 | 不支持某个提供者,如:不支持腾讯地图 | |
-1504 | 坐标系类型不支持 | |
-1505 | 定位服务不能用 |
5+ API通常通过错误回调(ErrorCallback)函数返回错误,并且在回调函数中包含Event错误信息:
interface Event {
readonly attribute Number code; // 错误码
readonly attribute String message; // 错误描述信息
}
- code 表示错误码,可以在下面列表中查询到对应的错误原因:
当code值为-100时,表示是使用第三方SDK时内部业务逻辑发生错误,此时需要查看message信息 - message 表示错误描述信息,用于提示用户错误原因,当code值为-100时错误描述信息的格式为:
[%模块名称%+%第三方SDK名称%: %第三方SDK错误码%]%错误描述信息%
如“[OAuth微信:-1]未知错误,...”
其中%第三方SDK错误码%参考:
通用错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1 | 参数错误 | 5+API传入的参数不正确 |
-2 | 用户取消 | 用户取消当前的操作 |
-3 | 此功能不支持 | 当前5+Runtime不支持此功能 |
-4 | 文件不存在 | 操作的文件或目录不存在 |
-5 | IO错误 | 文件读写操作错误,如文件被其它程序占用等 |
-6 | 网络错误 | 无法连接到网络 |
-7 | 业务参数配置缺失 | 使用第三方SDK时缺失SECRET、APPID、APPKEY等数据 |
-8 | 客户端未安装 | 调用的第三方客户端未安装 |
-9 | 快捷方式已存在 | 创建快捷方式时快捷方式已存在,仅部分手机支持 |
-10 | 授权失败 | 用户拒绝该API访问 |
-99 | 未知错误 | 未定义的错误 |
-100 | 业务内部错误 | 使用的第三方SDK内部错误 |
OAuth(登录授权)
错误码 | 错误描述 | 备注 |
---|---|---|
-1001 | 未登录或登录已注销 | |
-1002 | 获取Token失败 |
univerify(一键登录)
错误码 | 错误描述 |
---|---|
1000 | 当前 uniAppid 尚未开通一键登录 |
1001 | 应用所有者账号信息异常,请检查账号一键登录服务是否正常 |
1002 | 应用所有者账号信息异常,请检查账号余额是否充足 |
4001 | 请求参数异常 |
4003 | 开发者账户appid 校验异常,联系官方人员 |
5000 | 服务器未知异常,联系官方人员 |
30001 | 当前网络环境不适合执行该操作 |
30002 | 用户点击了其他登录方式 |
30003 | 用户关闭验证界面 |
30004 | 其他错误 |
30005 | 预登录失败 |
30006 | 一键登录失败 |
30007 | 获取本机号码校验token失败 |
40004 | 应用不存在 |
40047 | 一键登录取号失败 |
40053 | 手机号校验失败 |
40201 | 源IP鉴权失败 |
Runtime模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1201 | WGT/WGTU文件格式错误 | |
-1202 | WGT安装包中manifest.json文件不存在 | |
-1203 | WGT安装包中manifest.json文件格式错误 | |
-1204 | WGT安装包中manifest.json文件的appid不匹配 | |
-1205 | WGT安装包中manifest.json文件的version版本不匹配 | |
-1221 | WGTU安装包中update.xml文件不存在 | |
-1222 | WGTU安装包中update.xml文件格式错误 | |
-1223 | WGTU安装包中update.xml文件的appid不匹配 | |
-1224 | WGTU安装包中update.xml文件的version版本不匹配 | |
-1225 | WGTU安装包中www目录下manifest.json不存在 | |
-1226 | WGTU安装包中www目录下manifest.json文件格式错误 | |
-1227 | WGTU安装包中www目录下manifest.json文件的appid不匹配 | |
-1228 | WGTU安装包中www目录下manifest.json文件的version版本不匹配 | |
-1229 | HTML5+ Runtime缺少升级包manifest.json中配置的模块 | 这种情况下应该使用apk/ipa升级 |
-1250 | uni-app编译模式切换不支持升级应用资源 |
Audio模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1301 | 文件播放格式错误 | |
-1302 | 文件请求超时 |
Sqlite模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1401 | 数据库没有打开 | |
-1402 | 数据库已经打开 | |
-1403 | WWW目录下的数据库只有读权限 | |
-1404 | 其他错误 |
<a id="geolocation"/>
Geolocation模块错误
错误码 | 错误描述 | 备注 |
---|---|---|
-1501 | 坐标地址解析失败 | |
-1502 | 坐标地址获取失败 | |
-1503 | 不支持某个提供者,如:不支持腾讯地图 | |
-1504 | 坐标系类型不支持 | |
-1505 | 定位服务不能用 |
【技术分享】原生actionsheet集成到原生项目中去的大坑~~~~(>_<)~~~~
actionsheet 底部弹出菜单;
第一种:H5模式的actionsheet
优点: 可通过css自由定制展现样式
缺点: 1.不支持覆盖顶部状态栏; 2.不支持跨webview的遮罩; 3.在有map等原生组件时,容易被遮挡
第二种:5 runtime封装的原生actionsheet
优点: 支持覆盖顶部状态栏,支持跨webview的遮罩,有原生组件也会在顶层;
缺点 不支持定义样式 (集成到原生可通过修改res的资源文件更改样式)
我想着现在的项目是HB做好html集成到原生Android项目去的,
那就选择用第二种吧,关键是写法超简单!
plus.nativeUI.actionSheet({
cancel: "取消",
buttons: [{
title: "拍照"
}, {
title: "相册"
}]
}, function(e) {
var index = e.index;
switch (index) { //case 0: 取消
case 1: //拍照
break;
case 2: //相册
break;
}
});
这个代码在HBuilder运行是正常的,效果如下
但是集成到原生咋就没有任何反应了呢!!
认真看官方文档也没有发觉要特别注意的地方
http://www.html5plus.org/doc/zh_cn/nativeUI.html#plus.nativeUI.actionSheet
然后检查配置文件,检查权限,检查集成的jar包 ,换手机调 ,,,总之一顿折腾..还是没有反应..
下载了最新的Android集成SDK,发现了个txt文件,写了这么个重要提示:
这个是什么意思呢??
1.RInformation.java的包名要改成啥样?
- ActionSheet哪个文件包名又不能改了?
- res目录下这么多图片布局资源,要拷的哪些?
好坑哇~~(>_<)~~
继续调半天:功夫不负有心人,调好了
(发誓集成到原生的actionsheet再也不用第二种了 唉 html写法简单,但是到原生要导入这么多东西):
最后记得导包:
nativeui.jar
actionsheet 底部弹出菜单;
第一种:H5模式的actionsheet
优点: 可通过css自由定制展现样式
缺点: 1.不支持覆盖顶部状态栏; 2.不支持跨webview的遮罩; 3.在有map等原生组件时,容易被遮挡
第二种:5 runtime封装的原生actionsheet
优点: 支持覆盖顶部状态栏,支持跨webview的遮罩,有原生组件也会在顶层;
缺点 不支持定义样式 (集成到原生可通过修改res的资源文件更改样式)
我想着现在的项目是HB做好html集成到原生Android项目去的,
那就选择用第二种吧,关键是写法超简单!
plus.nativeUI.actionSheet({
cancel: "取消",
buttons: [{
title: "拍照"
}, {
title: "相册"
}]
}, function(e) {
var index = e.index;
switch (index) { //case 0: 取消
case 1: //拍照
break;
case 2: //相册
break;
}
});
这个代码在HBuilder运行是正常的,效果如下
但是集成到原生咋就没有任何反应了呢!!
认真看官方文档也没有发觉要特别注意的地方
http://www.html5plus.org/doc/zh_cn/nativeUI.html#plus.nativeUI.actionSheet
然后检查配置文件,检查权限,检查集成的jar包 ,换手机调 ,,,总之一顿折腾..还是没有反应..
下载了最新的Android集成SDK,发现了个txt文件,写了这么个重要提示:
这个是什么意思呢??
1.RInformation.java的包名要改成啥样?
- ActionSheet哪个文件包名又不能改了?
- res目录下这么多图片布局资源,要拷的哪些?
好坑哇~~(>_<)~~
继续调半天:功夫不负有心人,调好了
(发誓集成到原生的actionsheet再也不用第二种了 唉 html写法简单,但是到原生要导入这么多东西):
最后记得导包:
nativeui.jar
【公告】关于升级到MacOSX10.11beta3用户HBuilder无法启动的解决办法
问题现象
MacOSX10.11beta3的用户启动HBuilder进入HBuilder主界面,显示无响应,同时dock栏一直在跳动
问题原因分析
MacOSX10.11beta3与eclipse不兼容,eclipse的绝大多数版本在该测试版OSX系统上无法启动,而HBuilder恰恰是基于出问题的某个eclipse版本定制的。
解决办法
MacOSX10.11beta4已修复此问题,请升级到MacOSX10.11beta3的用户再次升级版本到MacOSXbeta4
问题现象
MacOSX10.11beta3的用户启动HBuilder进入HBuilder主界面,显示无响应,同时dock栏一直在跳动
问题原因分析
MacOSX10.11beta3与eclipse不兼容,eclipse的绝大多数版本在该测试版OSX系统上无法启动,而HBuilder恰恰是基于出问题的某个eclipse版本定制的。
解决办法
MacOSX10.11beta4已修复此问题,请升级到MacOSX10.11beta3的用户再次升级版本到MacOSXbeta4
收起阅读 »关于HBuilder“制作移动App资源升级包...”生成的wgt包升级后会导致部分功能失效的问题
问题现象
使用HBuilderuilder6.0.0及之前版本打包ipa/apk包,HBuilder升级到6.1.0及之后版本,通过“发行”->“制作移动App资源升级包...”生成应用升级包wgt文件后,或者是生成应用差量升级包(wgtu)。
在之前安装ipa/apk包中通过应用升级(差量升级)后就一直停留在启动页面,或者进入应用后功能无法使用。
问题原因分析
确认是因为升级HBuilder6.1.0版本后没有兼容以前的UI模块导致的问题,会影响plus.webview.、plus.nativeUI.、plus.navigator.* API的使用。
新版本中已经将UI模块拆分成Webview、NativeUI、Navigator三个独立的模块,默认生成的wgt文件中没有添加UI模块权限,导致老版本Runtime更新wgt后判断缺少UI模块权限而无法调用相关API。
解决方案
目前可通过在manifest.json文件的"permissions"节点下添加“UI”节点解决。
打开应用的manifest.json文件,切换到“代码视图”,在"permissions"节点下添加“UI”数据如下:
"UI": {
"description": "系统原生控件"
}
注:
6.1.0之后版本已经去掉模块权限的判断逻辑,不会存在此问题。
6.2.0版本默认添加UI模块,确保向下的兼容性。
问题现象
使用HBuilderuilder6.0.0及之前版本打包ipa/apk包,HBuilder升级到6.1.0及之后版本,通过“发行”->“制作移动App资源升级包...”生成应用升级包wgt文件后,或者是生成应用差量升级包(wgtu)。
在之前安装ipa/apk包中通过应用升级(差量升级)后就一直停留在启动页面,或者进入应用后功能无法使用。
问题原因分析
确认是因为升级HBuilder6.1.0版本后没有兼容以前的UI模块导致的问题,会影响plus.webview.、plus.nativeUI.、plus.navigator.* API的使用。
新版本中已经将UI模块拆分成Webview、NativeUI、Navigator三个独立的模块,默认生成的wgt文件中没有添加UI模块权限,导致老版本Runtime更新wgt后判断缺少UI模块权限而无法调用相关API。
解决方案
目前可通过在manifest.json文件的"permissions"节点下添加“UI”节点解决。
打开应用的manifest.json文件,切换到“代码视图”,在"permissions"节点下添加“UI”数据如下:
"UI": {
"description": "系统原生控件"
}
注:
6.1.0之后版本已经去掉模块权限的判断逻辑,不会存在此问题。
6.2.0版本默认添加UI模块,确保向下的兼容性。
Mui的栅格系统
今天发现Mui有自己的栅格系统
但是使用起来有点小问题,不能嵌套切存在换行
看了下mui的grid9宫格的demo,发现在grid-view里面还做了修订才实现的
那么这样,增加一个mui-col样式就解决了所有问题,包括实现栅格的嵌套,给大家个参考:
<style>
.mui-col{
margin-right: -4px;
display: inline-block;
}
</style>
<div class="mui-content">
<div class="mui-col mui-col-xs-4">
<span class="mui-col mui-col-xs-6">46</span>
<span class="mui-col mui-col-xs-2">42</span>
<span class="mui-col mui-col-xs-4">44</span>
</div>
<div class="mui-col mui-col-xs-8">
<span>8</span>
</div>
</div>
今天发现Mui有自己的栅格系统
但是使用起来有点小问题,不能嵌套切存在换行
看了下mui的grid9宫格的demo,发现在grid-view里面还做了修订才实现的
那么这样,增加一个mui-col样式就解决了所有问题,包括实现栅格的嵌套,给大家个参考:
<style>
.mui-col{
margin-right: -4px;
display: inline-block;
}
</style>
<div class="mui-content">
<div class="mui-col mui-col-xs-4">
<span class="mui-col mui-col-xs-6">46</span>
<span class="mui-col mui-col-xs-2">42</span>
<span class="mui-col mui-col-xs-4">44</span>
</div>
<div class="mui-col mui-col-xs-8">
<span>8</span>
</div>
</div>
收起阅读 »
使用BroadcastReceiver监听蓝牙开关状态
var main = plus.android.runtimeMainActivity();
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
var BAdapter = new BluetoothAdapter.getDefaultAdapter();
var resultDiv = document.getElementById('output');
var receiver=plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) { //实现onReceiver回调函数
plus.android.importClass(intent);
console.log(intent.getAction());
resultDiv.textContent += '\nAction :' + intent.getAction();
main.unregisterReceiver(receiver);
}
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var filter = new IntentFilter();
filter.addAction(BAdapter.ACTION_STATE_CHANGED); //监听蓝牙开关
main.registerReceiver(receiver, filter); //注册监听
if (!BAdapter.isEnabled()) {
BAdapter.enable(); //启动蓝牙
}else{
BAdapter.disable();
}
代码已测试过了ctrl+c直接使用
更新:5+已提供蓝牙,参考http://www.html5plus.org/doc/zh_cn/bluetooth.html 注意需要最新版HBuilderX
var main = plus.android.runtimeMainActivity();
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
var BAdapter = new BluetoothAdapter.getDefaultAdapter();
var resultDiv = document.getElementById('output');
var receiver=plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) { //实现onReceiver回调函数
plus.android.importClass(intent);
console.log(intent.getAction());
resultDiv.textContent += '\nAction :' + intent.getAction();
main.unregisterReceiver(receiver);
}
});
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
var filter = new IntentFilter();
filter.addAction(BAdapter.ACTION_STATE_CHANGED); //监听蓝牙开关
main.registerReceiver(receiver, filter); //注册监听
if (!BAdapter.isEnabled()) {
BAdapter.enable(); //启动蓝牙
}else{
BAdapter.disable();
}
代码已测试过了ctrl+c直接使用
更新:5+已提供蓝牙,参考http://www.html5plus.org/doc/zh_cn/bluetooth.html 注意需要最新版HBuilderX
收起阅读 »请Mac版用户近期不要升级MacOS 10.11beta3及10.11公测版
更新:最新版的mac系统已经修复了。此问题过期
苹果官方已确认MacOS 10.11beta3及10.11公测版与eclipse不兼容,而HBuilder基于eclipse做了深度定制,因此在mac10.11beta3及近期发布的公测版上,HBuilder也无法启动。
请大家近期不要升级Mac 10.11beta3及10.11公测版,并等待苹果修复bug
详情参见https://developer.apple.com/library/prerelease/mac/releasenotes/General/rn-osx-10.11/
相关内容截图如下:
更新:最新版的mac系统已经修复了。此问题过期
苹果官方已确认MacOS 10.11beta3及10.11公测版与eclipse不兼容,而HBuilder基于eclipse做了深度定制,因此在mac10.11beta3及近期发布的公测版上,HBuilder也无法启动。
请大家近期不要升级Mac 10.11beta3及10.11公测版,并等待苹果修复bug
详情参见https://developer.apple.com/library/prerelease/mac/releasenotes/General/rn-osx-10.11/
相关内容截图如下:
[源码] MCalenda 基于MUI的日历插件,史上最精简
正要用个日历插件,发现mui并没有,基于JQuery的插件都太重了,在我的小米手机上居然会有卡顿。
初学mui, 于是开始造轮子, 目标是抛弃所有依赖和花哨,纯精简,速度快,
先把Demo发布了,慢慢会增加week/day View和事件支持。
实例:
var MC = mui("#container").MCalendar();
MC.changeDate(new Date())
MC.hide()
MC.show()
MC.getDate()
源码在此:这能不能加精啊?
MCalendar源码
截图:
正要用个日历插件,发现mui并没有,基于JQuery的插件都太重了,在我的小米手机上居然会有卡顿。
初学mui, 于是开始造轮子, 目标是抛弃所有依赖和花哨,纯精简,速度快,
先把Demo发布了,慢慢会增加week/day View和事件支持。
实例:
var MC = mui("#container").MCalendar();
MC.changeDate(new Date())
MC.hide()
MC.show()
MC.getDate()
源码在此:这能不能加精啊?
MCalendar源码
截图:
收起阅读 »微信支付服务端代码 .net C# MVC
研究了很多demo示例,最后整理出了如下的.net MVC版本的微信支付服务端代码,亲测可行,服务端所需要的其他类文件我已经打包存附件了,需要的可以下载使用
以下只实现了基础功能,如果有什么问题还请大神们多多指教。
服务端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WeddingCarService.Models;
using Newtonsoft.Json;
using System.Text;
using System.Xml;
using System.Collections;
using System.Text.RegularExpressions;
using System.Reflection;
using WxPayAPI;
using WeddingCarService.WXPay;
namespace WeddingCarService.Controllers
{
public class Wx_Pay_Model
{
public int retcode { get; set; }
public string retmsg { get; set; }
public string appid { get; set; }
public string noncestr { get; set; }
public string package { get; set; }
public string partnerid { get; set; }
public string prepayid { get; set; }
public string timestamp { get; set; }
public string sign { get; set; }
}
public class wxPayController : Controller
{
public static string mchid = "11111"; //mchid
public static string appId = "11111"; //appid
public static string appsecret = "11111"; //appsecret
public static string appkey = "11111"; //paysignkey(非appkey 在微信商户平台设置 (md5)111111111111)
public static string notify_url = Common.CommonDefine.ServerPath + "/wxpay/wxtNotify"; //支付完成后的回调处理页面
//
// GET: /wxPay/
public ActionResult Index()
{
return View();
}
/// <summary>
/// 微信支付主体接口
/// </summary>
/// <returns></returns>
public ActionResult wxpay()
{
//************************************************支付参数接收********************************
///获取金额
string amount = Request.QueryString["_amount"];
string sp_billno = string.IsNullOrEmpty(Request.QueryString["_orderid"]) ? DateTime.Now.ToString("yyyyMMddhhmmssffff") : Request.QueryString["_orderid"];
string detail = Request.QueryString["_detail"];
double dubamount;
double.TryParse(amount, out dubamount);
//根据appid和appappsecret获取refresh_token
//string url_token = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appsecret);
//string returnStr = tokenservice.GetToken(appId, appsecret);
//时间戳
var timeStamp = TenpayUtil.getTimestamp();
//随机验证码
var nonceStr = TenpayUtil.getNoncestr();
//****************************************************************获取预支付订单编号***********************
//设置package订单参数
Hashtable packageParameter = new Hashtable();
packageParameter.Add("appid", appId);//开放账号ID
packageParameter.Add("mch_id", mchid); //商户号
packageParameter.Add("nonce_str", nonceStr); //随机字符串
packageParameter.Add("body", detail); //商品描述
packageParameter.Add("out_trade_no", sp_billno); //商家订单号
packageParameter.Add("total_fee", (dubamount*100).ToString()); //商品金额,以分为单位
packageParameter.Add("spbill_create_ip", Request.UserHostAddress); //订单生成的机器IP,指用户浏览器端IP
packageParameter.Add("notify_url", notify_url); //接收财付通通知的URL
packageParameter.Add("trade_type", "APP");//交易类型
packageParameter.Add("fee_type", "CNY"); //币种,1人民币 66
//获取签名
var sign = CreateMd5Sign("key", appkey, packageParameter, Request.ContentEncoding.BodyName);
//拼接上签名
packageParameter.Add("sign", sign);
//生成加密包的XML格式字符串
string data = parseXML(packageParameter);
//调用统一下单接口,获取预支付订单号码
string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder");
//获取预支付ID
var prepayId = string.Empty;
var xdoc = new XmlDocument();
xdoc.LoadXml(prepayXml);
XmlNode xn = xdoc.SelectSingleNode("xml");
XmlNodeList xnl = xn.ChildNodes;
if (xnl.Count > 7)
{
prepayId = xnl[7].InnerText;
}
//**************************************************封装调起微信客户端支付界面字符串********************
//设置待加密支付参数并加密
Hashtable paySignReqHandler = new Hashtable();
paySignReqHandler.Add("appid", appId);
paySignReqHandler.Add("partnerid", mchid);
paySignReqHandler.Add("prepayid", prepayId);
paySignReqHandler.Add("package", "Sign=WXPay");
paySignReqHandler.Add("noncestr", nonceStr);
paySignReqHandler.Add("timestamp", timeStamp);
var paySign = CreateMd5Sign("key", appkey, paySignReqHandler, Request.ContentEncoding.BodyName);
//设置支付包参数
Wx_Pay_Model wxpaymodel = new Wx_Pay_Model();
wxpaymodel.retcode = 0;//5+固定调起参数
wxpaymodel.retmsg = "ok";//5+固定调起参数
wxpaymodel.appid = appId;//AppId,微信开放平台新建应用时产生
wxpaymodel.partnerid = mchid;//商户编号,微信开放平台申请微信支付时产生
wxpaymodel.prepayid = prepayId;//由上面获取预支付流程获取
wxpaymodel.package = "Sign=WXpay";//APP支付固定设置参数
wxpaymodel.noncestr = nonceStr;//随机字符串,
wxpaymodel.timestamp = timeStamp;//时间戳
wxpaymodel.sign = paySign;//上面关键参数加密获得
//将参数对象直接返回给客户端
return Json(new { msg = "", result = wxpaymodel }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 将类对象拼接成调起支付字符串
/// </summary>
/// <param name="_model"></param>
/// <returns></returns>
private string ReSetPayString(Wx_Pay_Model _model)
{
StringBuilder strpay = new StringBuilder();
PropertyInfo[] props = _model.GetType().GetProperties();
strpay.Append("{");
foreach (PropertyInfo property in props)
{
strpay.Append(property.Name + ":\""+property.GetValue(_model, null).ToString()+"\",");
}
strpay.Remove(strpay.Length - 1, 1);
strpay.Append("}");
return strpay.ToString();
}
/// <summary>
/// 输出XML
/// </summary>
/// <returns></returns>
public string parseXML(Hashtable _parameters)
{
var sb = new StringBuilder();
sb.Append("<xml>");
var akeys = new ArrayList(_parameters.Keys);
foreach (string k in akeys)
{
var v = (string)_parameters[k];
if (Regex.IsMatch(v, @"^[0-9.]$"))
{
sb.Append("<" + k + ">" + v + "</" + k + ">");
}
else
{
sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">");
}
}
sb.Append("</xml>");
return sb.ToString();
}
/// <summary>
/// 创建package签名
/// </summary>
/// <param name="key">密钥键</param>
/// <param name="value">财付通商户密钥(自定义32位密钥)</param>
/// <returns></returns>
public virtual string CreateMd5Sign(string key, string value, Hashtable parameters, string _ContentEncoding)
{
var sb = new StringBuilder();
//数组化键值对,并排序
var akeys = new ArrayList(parameters.Keys);
akeys.Sort();
//循环拼接包参数
foreach (string k in akeys)
{
var v = (string)parameters[k];
if (null != v && "".CompareTo(v) != 0
&& "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0)
{
sb.Append(k + "=" + v + "&");
}
}
//最后拼接商户自定义密钥
sb.Append(key + "=" + value);
//加密
string sign = MD5Util.GetMD5(sb.ToString(), _ContentEncoding).ToUpper();
//返回密文
return sign;
}
/// <summary>
/// 日志记录工具类
/// </summary>
/// <param name="pathWrite"></param>
/// <param name="content"></param>
public static void WriteFile(string pathWrite, string content)
{
try
{
if (System.IO.File.Exists(pathWrite))
{
//System.IO.File.Delete(pathWrite);
}
else
{
System.IO.File.Create(pathWrite);
}
System.IO.File.AppendAllText(pathWrite, content + "\r\n----------------------------------------\r\n",
Encoding.GetEncoding("utf-8"));
}
catch (Exception e)
{
}
}
/// <summary>
/// 微信支付异步回调方法
/// </summary>
/// <returns></returns>
public ActionResult wxtNotify()
{
ResultNotify resultNotify = new ResultNotify(Request);
resultNotify.ProcessNotify();
return Json(new { msg = "成功" }, JsonRequestBehavior.AllowGet);
}
}
}
客户端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet" />
<script type="text/javascript" charset="utf-8">
mui.init();
var channel = null;
var channels = null;
// 1. 获取支付通道
function plusReady() {
// 获取支付通道
plus.payment.getChannels(function(cs) {
channels = cs;
}, function(e) {
alert("获取支付通道失败:" + e.message);
});
}
document.addEventListener('plusready', plusReady, false);
var ALIPAYSERVER = 'http://demo.dcloud.net.cn/helloh5/payment/alipay.php?total=';
var WXPAYSERVER = 'http://192.168.3.141/wxPay/wxpay';
/*var WXPAYSERVER = 'http://demo.dcloud.net.cn/payment/?payid=wxpay&appid=HBuilder&total=1';*/
// 2. 发起支付请求
function pay(id) {
// 从服务器请求支付订单
var PAYSERVER = '';
if (id == 'alipay') {
PAYSERVER = ALIPAYSERVER;
} else if (id == 'wxpay') {
PAYSERVER = WXPAYSERVER;
} else {
plus.nativeUI.alert("不支持此支付通道!", null, "捐赠");
return;
}
//获取支付通道
for (var i in channels) {
if (channels[i].id == id) {
channel = channels[i];
}
}
mui.get(PAYSERVER, {
_amount: 1,
_orderid: "",
_detail: "测试微信支付"
}, function(data) {
var varpay = {
retcode: 0,
retmsg: "ok",
appid: data.result.appid,
noncestr: data.result.noncestr,
package: "Sign=WXPay",
partnerid: data.result.partnerid,
prepayid: data.result.prepayid,
timestamp: data.result.timestamp,
sign: data.result.sign
}
plus.payment.request(channel, varpay, function(result) {
plus.nativeUI.alert("支付成功!", function() {
back();
});
}, function(e) {
plus.nativeUI.alert("支付失败:" + e.code + "支付失败:" + e.message);
console.log(e.code);
console.log(e.message);
});
}, "json");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
switch (xhr.readyState) {
case 4:
if (xhr.status == 200) {
alert(xhr.result);
plus.payment.request(channel, xhr.result, function(result) {
plus.nativeUI.alert("支付成功!", function() {
back();
});
}, function(error) {
plus.nativeUI.alert("支付失败:" + error.code);
});
} else {
alert("获取订单信息失败!");
}
break;
default:
break;
}
}
/* xhr.open('GET',PAYSERVER);
xhr.send();*/
}
</script>
</head>
<body>
<header class="mui-bar mui-bar-nav">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">支付测试</h1>
</header>
<div class="mui-content">
<input type="button" class="btn btn-lg" id="pay" value="pay" onclick="pay('wxpay')" />
</div>
</body>
</html>
研究了很多demo示例,最后整理出了如下的.net MVC版本的微信支付服务端代码,亲测可行,服务端所需要的其他类文件我已经打包存附件了,需要的可以下载使用
以下只实现了基础功能,如果有什么问题还请大神们多多指教。
服务端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WeddingCarService.Models;
using Newtonsoft.Json;
using System.Text;
using System.Xml;
using System.Collections;
using System.Text.RegularExpressions;
using System.Reflection;
using WxPayAPI;
using WeddingCarService.WXPay;
namespace WeddingCarService.Controllers
{
public class Wx_Pay_Model
{
public int retcode { get; set; }
public string retmsg { get; set; }
public string appid { get; set; }
public string noncestr { get; set; }
public string package { get; set; }
public string partnerid { get; set; }
public string prepayid { get; set; }
public string timestamp { get; set; }
public string sign { get; set; }
}
public class wxPayController : Controller
{
public static string mchid = "11111"; //mchid
public static string appId = "11111"; //appid
public static string appsecret = "11111"; //appsecret
public static string appkey = "11111"; //paysignkey(非appkey 在微信商户平台设置 (md5)111111111111)
public static string notify_url = Common.CommonDefine.ServerPath + "/wxpay/wxtNotify"; //支付完成后的回调处理页面
//
// GET: /wxPay/
public ActionResult Index()
{
return View();
}
/// <summary>
/// 微信支付主体接口
/// </summary>
/// <returns></returns>
public ActionResult wxpay()
{
//************************************************支付参数接收********************************
///获取金额
string amount = Request.QueryString["_amount"];
string sp_billno = string.IsNullOrEmpty(Request.QueryString["_orderid"]) ? DateTime.Now.ToString("yyyyMMddhhmmssffff") : Request.QueryString["_orderid"];
string detail = Request.QueryString["_detail"];
double dubamount;
double.TryParse(amount, out dubamount);
//根据appid和appappsecret获取refresh_token
//string url_token = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appsecret);
//string returnStr = tokenservice.GetToken(appId, appsecret);
//时间戳
var timeStamp = TenpayUtil.getTimestamp();
//随机验证码
var nonceStr = TenpayUtil.getNoncestr();
//****************************************************************获取预支付订单编号***********************
//设置package订单参数
Hashtable packageParameter = new Hashtable();
packageParameter.Add("appid", appId);//开放账号ID
packageParameter.Add("mch_id", mchid); //商户号
packageParameter.Add("nonce_str", nonceStr); //随机字符串
packageParameter.Add("body", detail); //商品描述
packageParameter.Add("out_trade_no", sp_billno); //商家订单号
packageParameter.Add("total_fee", (dubamount*100).ToString()); //商品金额,以分为单位
packageParameter.Add("spbill_create_ip", Request.UserHostAddress); //订单生成的机器IP,指用户浏览器端IP
packageParameter.Add("notify_url", notify_url); //接收财付通通知的URL
packageParameter.Add("trade_type", "APP");//交易类型
packageParameter.Add("fee_type", "CNY"); //币种,1人民币 66
//获取签名
var sign = CreateMd5Sign("key", appkey, packageParameter, Request.ContentEncoding.BodyName);
//拼接上签名
packageParameter.Add("sign", sign);
//生成加密包的XML格式字符串
string data = parseXML(packageParameter);
//调用统一下单接口,获取预支付订单号码
string prepayXml = HttpUtil.Send(data, "https://api.mch.weixin.qq.com/pay/unifiedorder");
//获取预支付ID
var prepayId = string.Empty;
var xdoc = new XmlDocument();
xdoc.LoadXml(prepayXml);
XmlNode xn = xdoc.SelectSingleNode("xml");
XmlNodeList xnl = xn.ChildNodes;
if (xnl.Count > 7)
{
prepayId = xnl[7].InnerText;
}
//**************************************************封装调起微信客户端支付界面字符串********************
//设置待加密支付参数并加密
Hashtable paySignReqHandler = new Hashtable();
paySignReqHandler.Add("appid", appId);
paySignReqHandler.Add("partnerid", mchid);
paySignReqHandler.Add("prepayid", prepayId);
paySignReqHandler.Add("package", "Sign=WXPay");
paySignReqHandler.Add("noncestr", nonceStr);
paySignReqHandler.Add("timestamp", timeStamp);
var paySign = CreateMd5Sign("key", appkey, paySignReqHandler, Request.ContentEncoding.BodyName);
//设置支付包参数
Wx_Pay_Model wxpaymodel = new Wx_Pay_Model();
wxpaymodel.retcode = 0;//5+固定调起参数
wxpaymodel.retmsg = "ok";//5+固定调起参数
wxpaymodel.appid = appId;//AppId,微信开放平台新建应用时产生
wxpaymodel.partnerid = mchid;//商户编号,微信开放平台申请微信支付时产生
wxpaymodel.prepayid = prepayId;//由上面获取预支付流程获取
wxpaymodel.package = "Sign=WXpay";//APP支付固定设置参数
wxpaymodel.noncestr = nonceStr;//随机字符串,
wxpaymodel.timestamp = timeStamp;//时间戳
wxpaymodel.sign = paySign;//上面关键参数加密获得
//将参数对象直接返回给客户端
return Json(new { msg = "", result = wxpaymodel }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 将类对象拼接成调起支付字符串
/// </summary>
/// <param name="_model"></param>
/// <returns></returns>
private string ReSetPayString(Wx_Pay_Model _model)
{
StringBuilder strpay = new StringBuilder();
PropertyInfo[] props = _model.GetType().GetProperties();
strpay.Append("{");
foreach (PropertyInfo property in props)
{
strpay.Append(property.Name + ":\""+property.GetValue(_model, null).ToString()+"\",");
}
strpay.Remove(strpay.Length - 1, 1);
strpay.Append("}");
return strpay.ToString();
}
/// <summary>
/// 输出XML
/// </summary>
/// <returns></returns>
public string parseXML(Hashtable _parameters)
{
var sb = new StringBuilder();
sb.Append("<xml>");
var akeys = new ArrayList(_parameters.Keys);
foreach (string k in akeys)
{
var v = (string)_parameters[k];
if (Regex.IsMatch(v, @"^[0-9.]$"))
{
sb.Append("<" + k + ">" + v + "</" + k + ">");
}
else
{
sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">");
}
}
sb.Append("</xml>");
return sb.ToString();
}
/// <summary>
/// 创建package签名
/// </summary>
/// <param name="key">密钥键</param>
/// <param name="value">财付通商户密钥(自定义32位密钥)</param>
/// <returns></returns>
public virtual string CreateMd5Sign(string key, string value, Hashtable parameters, string _ContentEncoding)
{
var sb = new StringBuilder();
//数组化键值对,并排序
var akeys = new ArrayList(parameters.Keys);
akeys.Sort();
//循环拼接包参数
foreach (string k in akeys)
{
var v = (string)parameters[k];
if (null != v && "".CompareTo(v) != 0
&& "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0)
{
sb.Append(k + "=" + v + "&");
}
}
//最后拼接商户自定义密钥
sb.Append(key + "=" + value);
//加密
string sign = MD5Util.GetMD5(sb.ToString(), _ContentEncoding).ToUpper();
//返回密文
return sign;
}
/// <summary>
/// 日志记录工具类
/// </summary>
/// <param name="pathWrite"></param>
/// <param name="content"></param>
public static void WriteFile(string pathWrite, string content)
{
try
{
if (System.IO.File.Exists(pathWrite))
{
//System.IO.File.Delete(pathWrite);
}
else
{
System.IO.File.Create(pathWrite);
}
System.IO.File.AppendAllText(pathWrite, content + "\r\n----------------------------------------\r\n",
Encoding.GetEncoding("utf-8"));
}
catch (Exception e)
{
}
}
/// <summary>
/// 微信支付异步回调方法
/// </summary>
/// <returns></returns>
public ActionResult wxtNotify()
{
ResultNotify resultNotify = new ResultNotify(Request);
resultNotify.ProcessNotify();
return Json(new { msg = "成功" }, JsonRequestBehavior.AllowGet);
}
}
}
客户端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet" />
<script type="text/javascript" charset="utf-8">
mui.init();
var channel = null;
var channels = null;
// 1. 获取支付通道
function plusReady() {
// 获取支付通道
plus.payment.getChannels(function(cs) {
channels = cs;
}, function(e) {
alert("获取支付通道失败:" + e.message);
});
}
document.addEventListener('plusready', plusReady, false);
var ALIPAYSERVER = 'http://demo.dcloud.net.cn/helloh5/payment/alipay.php?total=';
var WXPAYSERVER = 'http://192.168.3.141/wxPay/wxpay';
/*var WXPAYSERVER = 'http://demo.dcloud.net.cn/payment/?payid=wxpay&appid=HBuilder&total=1';*/
// 2. 发起支付请求
function pay(id) {
// 从服务器请求支付订单
var PAYSERVER = '';
if (id == 'alipay') {
PAYSERVER = ALIPAYSERVER;
} else if (id == 'wxpay') {
PAYSERVER = WXPAYSERVER;
} else {
plus.nativeUI.alert("不支持此支付通道!", null, "捐赠");
return;
}
//获取支付通道
for (var i in channels) {
if (channels[i].id == id) {
channel = channels[i];
}
}
mui.get(PAYSERVER, {
_amount: 1,
_orderid: "",
_detail: "测试微信支付"
}, function(data) {
var varpay = {
retcode: 0,
retmsg: "ok",
appid: data.result.appid,
noncestr: data.result.noncestr,
package: "Sign=WXPay",
partnerid: data.result.partnerid,
prepayid: data.result.prepayid,
timestamp: data.result.timestamp,
sign: data.result.sign
}
plus.payment.request(channel, varpay, function(result) {
plus.nativeUI.alert("支付成功!", function() {
back();
});
}, function(e) {
plus.nativeUI.alert("支付失败:" + e.code + "支付失败:" + e.message);
console.log(e.code);
console.log(e.message);
});
}, "json");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
switch (xhr.readyState) {
case 4:
if (xhr.status == 200) {
alert(xhr.result);
plus.payment.request(channel, xhr.result, function(result) {
plus.nativeUI.alert("支付成功!", function() {
back();
});
}, function(error) {
plus.nativeUI.alert("支付失败:" + error.code);
});
} else {
alert("获取订单信息失败!");
}
break;
default:
break;
}
}
/* xhr.open('GET',PAYSERVER);
xhr.send();*/
}
</script>
</head>
<body>
<header class="mui-bar mui-bar-nav">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">支付测试</h1>
</header>
<div class="mui-content">
<input type="button" class="btn btn-lg" id="pay" value="pay" onclick="pay('wxpay')" />
</div>
</body>
</html>
收起阅读 »