为帮助用户更好更快的使用原生插件,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。
微信简介
微信 (WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字。截止到2016年第一季度,微信已经覆盖中国 90% 以上的智能手机,月活跃用户达到 5.49 亿,用户覆盖 200 多个国家、超过 20 种语言。此外,各品牌的微信公众账号总数已经超过 800 万个,移动应用对接数量超过 85000 个,微信支付用户则达到了 4 亿左右。
微信提供公众平台、朋友圈、消息推送等功能,用户可以通过“摇一摇”、“搜索号码”、“附近的人”、扫二维码方式添加好友和关注公众平台,同时微信将内容分享给好友以及将用户看到的精彩内容分享到微信朋友圈。
微信功能服务
wxPayPlus 原生插件是 wxPay 原生插件的升级版,适配了iOS13。wxPay将停止更新。
wxPayPlus 封装了微信支付的 SDK,可实现微信支付功能;使用之前须从微信开放平台申请获得 appid、secret(用于获取 access_token)、partnerkey(微信公众平台商户原生插件生成的商户密钥)。
不能同时添加的原生插件:pingpp, ipayNow
本原生插件封装了两套支付方案:
方案一:开发者通过 getOrderId、payOrder 自己处理签名过程(微信开放平台建议把 getOrderId 放在服务器端执行);
方案二:通过 config 接口和 pay 接口把签名过程交予原生插件内部处理。config 接口的参数可通过 key.xml
文件配置。(本支付方案用于开发阶段测试验证账号的正确性,正式发版时请使用支付方案一) 注意:已废弃!
1.配置 config.xml 文件,配置完毕,需通过云端编译生效,配置方法如下:**
<feature name="wxPayPlus">
<param name="urlScheme" value="wxd0d84bbf23b4a0e4"/>
<param name="apiKey" value="wxd0d84bbf23b4a0e4"/>
<param name="apiSecret" value="a354f72aa1b4c2b8eaad137ac81434cd"/>
<param name="universalLink" value="https://developer.yonyou.com"/>
</feature>
字段描述:
urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动微信客户端,也可以从微信客户端跳回本应用。urlScheme 的 value 值是从微信开放平台获取的 appid。appid 申请方法参考微信开放平台接入文档。
apiKey:(必须配置)从微信开放平台获取的 appid,值与 urlScheme 相同。appid 申请方法参考微信开放平台接入文档。
apiSecret:从微信开放平台获取的 secret。获取 accessToken 时需要配置此项。appid 申请方法参考微信开放平台接入文档。
universalLink:(必须配置) 微信开发者Universal Link。
2.创建 entitlements 文件,Yonbuilder 移动开发平台上的开发者,可通过此文件告诉编译服务器开通 Associated Domain 功能。配置方法参考论坛帖子。配置示例如下:
```js
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:developer.yonyou.com</string>
</array>
</dict>
</plist>
```
其中 com.apple.developer.associated-domains 对应的值 applinks:developer.yonyou.com 是配置的你的应用的Universal Links。详情参考 苹果文档
3.开通 Associated Domains。 登录苹果开发者账号,在左侧列表里找到 Identifiers,选中后再找到你的 Bundle ID (包名),选中该包名,配置开启其 Associated Domains 功能。
4.服务器端支持苹果 Universal Links。支持方法参考 论坛帖子。
key.xml 配置详解:
key.xml
文件(适用于支付方案二、支付方案一忽略本文件)需要放在 widget/res
文件目录下,格式如下:
<?xml version="1.0" encoding="UTF-8" ?>
<security>
<item name="wxPayPlus_appId" value="wxd0d84bbf23b4a0e4"/>
<item name="wxPayPlus_mchId" value="1234567890"/>
<item name="wxPayPlus_partnerKey" value="***"/>
<item name="wxPayPlus_notifyUrl" value="***"/>
<item name="其它服务需加密的参数配置 " value="***"/>
.
.
.
</security>
字段描述:
wxPayPlus_appId:在微信开发者平台创建应用生成的 appId
wxPayPlus_mchId:商户号,填写商户对应参数
wxPayPlus_partnerKey:商户API密钥,务必同在商户平台->账户设置->API安全里填写的密钥保持一致,此密钥是根据微信对商户密钥的规范自己生成的
wxPayPlus_notifyUrl:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
获取预支付订单号(适用于支付方案一)
getOrderId({params}, callback(ret, err))
info:
ret:
{
return_code:'SUCCESS', //字符串类型;返回的状态码,SUCCESS/FAIL,此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
return_msg:'签名失败', //(可选项)字符串类型;返回信息,如非空,为错误原因,如:签名失败、参数格式校验错误...
//以下字段在return_code为SUCCESS的时候有返回
appid:'wx8888888888888888', //字符串类型;公众账号ID,调用接口提交的公众账号ID
mch_id:'1900000109', //字符串类型;商户号,调用接口提交的商户号
device_info:'013467007045764', //(可选项)字符串类型;设备号,调用接口提交的终端设备号
nonce_str:'5K8264ILTKCH16CQ2502SI8ZNMTM67VS', //字符串类型;随机字符串,微信返回的随机字符串
sign:'C380BEC2BFD727A4B6845133519F3AD6', //字符串类型;签名,微信返回的签名,详见上文链接(安全规范-签名算法)。用于验签(将本 ret JSON 对象按照签名算法签名后得到字符串跟本字符串比较,若相同则读取预支付订单,若不同则有可能是仿冒订单号)
result_code:'SUCCESS', //字符串类型;业务结果,SUCCESS/FAIL
err_code:'SYSTEMERROR', //(可选项)字符串类型;错误代码,详细参见统一支付订单-错误码(https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1)
err_code_des:'系统错误', //(可选项)字符串类型;错误代码描述,错误返回的信息描述
//以下字段在return_code 和result_code都为SUCCESS的时候有返回
trad_type:'JSAPI', //字符串类型;交易类型,调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,详细说明见参数规定(https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_2)
prepay_id:'wx201410272009395522657a690389285100', //字符串类型;预支付交易会话标识即订单号,微信生成的预支付回话标识,用于后续接口(payOrder)调用中使用,该值有效期为2小时
code_url:'URl:weixin://wxpay/s/An4baqw' //(可选项)字符串类型;二维码链接,trade_type为NATIVE是有返回,可将该参数值生成二维码展示出来进行扫码支付
}
var wxPayPlus = api.require('wxPayPlus');
wxPayPlus.getOrderId({
info: ''
}, function(ret, err) {});
iOS系统,Android系统
可提供的1.0.0及更高版本
支付订单(适用于支付方案一)
payOrder({params}, callback(ret, err))
apiKey:
orderId:
mchId:
nonceStr:
timeStamp:
package:
sign:
ret:
{
status: true //布尔型;true||false
}
err:
{
code: 1 //数字类型;
//错误码:
//-2(用户取消,发生场景:用户不支付了,点击取消,返回APP)
//-1(未知错误,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等)
//1 (apiKey值非法)
}
var wxPayPlus = api.require('wxPayPlus');
wxPayPlus.payOrder({
apiKey: '',
orderId: '',
mchId: '',
nonceStr: '',
timeStamp: '',
package: '',
sign: ''
}, function(ret, err) {
if (ret.status) {
//支付成功
} else {
alert(err.code);
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
注意:本接口已废弃!
配置原生插件内部处理签名时需要的参数(适用于支付方案二)
config({params}, callback(ret, err))
apiKey:
mchId:
key.xml
中读取partnerKey:
key.xml
中读取notifyUrl:
key.xml
中读取ret:
{
status: true //布尔型;true||false
}
err:
{
code: 1 //数字类型;错误码
//-1(未知错误)
//1(apiKey 值非法)
//2(mchId 值非法)
//3(partnerKey 值非法)
//4(notifyUrl 值非法)
}
var wxPayPlus = api.require('wxPayPlus');
wxPayPlus.config({
apiKey: '',
mchId: '',
partnerKey: '',
notifyUrl: ''
}, function(ret, err) {
if (ret.status) {
alert('配置商户支付参数成功');
} else {
alert(err.code);
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
注意:本接口已废弃!
支付订单(适用于支付方案二)
pay({params}, callback(ret, err))
description:
totalFee:
tradeNo:
spbillCreateIP:
deviceInfo:
detail:
attach:
feeType:
timeStart:
timeExpire:
goodsTag:
productId:
openId:
ret:
{
status: true, //布尔型;true||false
}
err:
{
code: 1 //数字类型;
//错误码:
//-2(用户取消)
//-1(可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等)
//1(必传参数缺失)
msg: 'NOAUTH' //字符串类型;
//取值范围:
//NOAUTH (商户无此接口权限)
//NOTENOUGH(余额不足)
//ORDERPAID(商户订单已支付)
//ORDERCLOSED(订单已关闭)
//SYSTEMERROR(系统错误)
//APPID_NOT_EXIST (APPID不存在)
//MCHID_NOT_EXIST(MCHID不存在)
//APPID_MCHID_NOT_MATCH(appid和mch_id不匹配)
//LACK_PARAMS(缺少参数)
//OUT_TRADE_NO_USED(商户订单号重复)
//SIGNERROR (签名错误)
//XML_FORMAT_ERROR(XML格式错误)
//REQUIRE_POST_METHOD(请使用post方法)
//POST_DATA_EMPTY(post数据为空)
//NOT_UTF8(编码格式错误)
}
var wxPayPlus = api.require('wxPayPlus');
wxPayPlus.pay({
description: 'iPad mini 16G 白色',
totalFee: '888',
tradeNo: '1217752501201407033233368018',
spbillCreateIP: '196.168.1.1',
deviceInfo: '013467007045764',
detail: 'iPad mini 16G 白色',
attach: '说明',
feeType: 'CNY',
timeStart: '20091225091010',
timeExpire: '20091227091010',
goodsTag: 'WXG',
productId: '12235413214070356458058',
openId: 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o'
}, function(ret, err) {
if (ret.status) {
alert(ret.result);
} else {
alert(err.code);
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
为帮助用户更好更快的使用原生插件,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。