本插件封装了威富通微信支付开放SDK。适用于商户在移动端APP中集成微信支付功能。
商户APP调用微信提供的SDK调用微信,商户APP会跳转到微信,支付完后跳回到商户APP内,最后展示支付结果。
目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)。
有关威富通微信支付详情,参考威富通官网:https://open.swiftpass.cn/
使用此插件之前需先配置 config.xml 文件,方法如下
<feature name="SPay">
<param name="urlScheme" value="wxd0d84bbf23b4a0e4"/>
<param name="appid" value="wxd0d84bbf23b4a0e4"/>
</feature>
字段描述:
urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动微信客户端,也可以从微信客户端跳回本应用。urlScheme 的 value 值是从微信开放平台获取的 appid。appid 申请方法参考微信开放平台接入文档。
apiKey:(必须配置)从微信开放平台获取的 appid,值与 urlScheme 相同。appid 申请方法参考微信开放平台接入文档。
注意:
iOS 平台上使用微信支付功能。需要在config里配置微信的白名单,否则无法跳转到微信APP支付。详情参考APICloud官方文档:白名单配置
微信支付流程
1,移动端用户提交订单到商户服务器
2,商户服务器请求威富通支付网关
3,威富通支付网关返回威富通支付的 Token 给商户服务器
4,商户服务器返回给移动端订单交易信息
5,移动端唤起威富通支付SDK(本插件),同时传入威富通 Tken
6,威富通SDK(本插件)给威富通服务器发起支付请求
7,威富通服务器向微信服务器发起支付请求
8,微信服务器向威富通服务器返回支付授权 Token
9,威富通服务器给移动端返回支付授权 Token
10,移动端SDK 唤起微信进行支付,跳转到微信支付页面
11,用户提交交易
12,返回交易结果,并跳转回本 APP
13,移动端获取支付结果
12.1,微信服务器收到用户提交的交易请求后会异步通知威富通服务器
12.2,威富通服务器将结果返回给商家服务器
12.3,商户服务器通知威富通服务器已收到支付结果
12.4,威富通服务器通知微信支付服务器已收到支付结果
注意:过程 2和3 在商户服务器端进行。本插件封装了过程5-13,其中7、8、9是威富通服务器端自动处理。
判断当前设备是否安装微信客户端
isInstalled(callback(ret, err))
ret:
{
installed: true //布尔型;true||false,当前设备是否安装微信客户端
}
err:
{
code: 0 //数字类型;
//错误码:
//-1(未知错误),
//0(成功)
}
var SPay = api.require('SPay');
SPay.isInstalled(function(ret, err) {
if (ret.installed) {
alert("当前设备已安装微信客户端");
} else {
alert('当前设备未安装微信客户端');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
配置微信支付的appid
config({params}, callback(ret))
appId:
var SPay = api.require('SPay');
SPay.config({
appId: 'wxd0d84bbf23b4a0e4'
});
iOS系统
可提供的1.0.0及更高版本
调起微信支付
wxPay({params}, callback(ret))
amount:
token:
service:
ret:
{
payModel: { //JSON对象;
payCode:, //数字类型;支付返回状态码,详情参考下文附件
message: //字符串类型;支付返回的文本说明信息
},
payDetail:{ //JSON对象;(Android无此字段)
body:'', //字符串类型;商品描述
status:, //数字类型;返回状态码
message:'', //字符串类型;返回信息
money:, //数字类型;支付金额
out_trade:'', //字符串类型;商户订单号
order_no:'', //字符串类型;威富通订单号
transaction_id:'', //字符串类型;第三方订单号
mch_name:'', //字符串类型;商户名
trade_time:'', //字符串类型;支付时间
need_query:'', //字符串类型;统一反扫是否需要继续扫描标示(Y需要查询,N 不需要查询)
trade_type:'' //字符串类型;交易类型
}
}
//二维码生成失败
SPayClientConstEnumPayQRMakeErro = 1000,
//生成二维码生成,等待扫描中
SPayClientConstEnumPayQRWaitScan = 1001,
//传入的支付类型无效
SPayClientConstEnumPayPositiveScansTypeInvalid = 1002,
//二维码等待扫码超时
SPayClientConstEnumPayQRWaitScanTimerOut = 1003,
//二维码在等待扫描的时候,用户退出了支付
SPayClientConstEnumPayUserOut = 1004,
//用户在选择支付类型的时候,选择了取消选择支付
SPayClientConstEnumCancelSelect = 1005,
//传入的参数错误
SPayClientConstEnumParameterError = 1100,
//TokenID失效
SPayClientConstEnumPayTokenIDInvalid = 400,
//TokenID未知
SPayClientConstEnumPayTokenIDUnknown = 401,
//二维码未支付
SPayClientConstEnumPayQRUnUse = 204,
//二维码被扫码,但是支付失败
SPayClientConstEnumPayQRPayErro = 202,
//app支付,支付失败
SPayClientConstEnumAppPayErro = 601,
//wap支付,支付失败
SPayClientConstEnumWapPayErro = 701,
//wap支付,用户取消了支付
SPayClientConstEnumWapPayOut = 702,
//wap支付,用户未支付
SPayClientConstEnumWapPayUnpay = 703,
//支付成功
SPayClientConstEnumPaySuccess = 201,
//反扫冲正成功
SPayClientConstEnumReverseScanPayReverseSuccess = 2001,
//反扫冲正失败
SPayClientConstEnumReverseScanPayReverseErro = 2002,
//反扫支付失败
SPayClientConstEnumReverseScanPayErro = 2003,
//用户在扫码界面直接退出的交易,交易失败
SPayClientConstEnumReverseScanCancelSelect = 2004,
//设备设备没有摄像头
SPayClientConstEnumNotCamera = 3001,
//设备摄像头权限访问受限
SPayClientConstEnumCameraNotOpen= 3002,
//手Q没有安装
SPayClientConstEnumQQNotOpen= 3003,
//微信没有安装(微信Wap支付时候用到)
SPayClientConstEnumWechatNotOpen= 3004,
//支付宝没有安装(支付宝Wap支付时候用到)
SPayClientConstEnumAlipayNotOpen = 3005
//app 签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
SPayClientConstEnumAppPayErro_1= -1,
//app支付,用户取消了支付
SPayClientConstEnumAppPayOut = -2,
var SPay = api.require('SPay');
SPay.wxPay({
service: 'pay.weixin.app',
token: '147430b88ea3622250ae32eca5151ffba',
amount: 1
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本