wxPay

来自于:官方立即使用

概述

微信简介

微信 (WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字。截止到2016年第一季度,微信已经覆盖中国 90% 以上的智能手机,月活跃用户达到 5.49 亿,用户覆盖 200 多个国家、超过 20 种语言。此外,各品牌的微信公众账号总数已经超过 800 万个,移动应用对接数量超过 85000 个,微信支付用户则达到了 4 亿左右。

微信提供公众平台、朋友圈、消息推送等功能,用户可以通过“摇一摇”、“搜索号码”、“附近的人”、扫二维码方式添加好友和关注公众平台,同时微信将内容分享给好友以及将用户看到的精彩内容分享到微信朋友圈。

微信功能服务

  • 朋友圈:用户可以通过朋友圈发表文字和图片,同时可通过其他软件将文章或者音乐分享到朋友圈。用户可以对好友新发的照片进行“评论”或“赞”,用户只能看相同好友的评论或赞。
  • 语音提醒:用户可以通过语音告诉Ta提醒打电话或是查看邮件。[19]
  • 通讯录安全助手:开启后可上传手机通讯录至服务器,也可将之前上传的通讯录下载至手机。[24]
  • QQ邮箱提醒:开启后可接收来自QQ邮件的邮件,收到邮件后可直接回复或转发。[24]
  • 私信助手:开启后可接收来自QQ微博的私信,收到私信后可直接回复。[24]
  • 漂流瓶:通过扔瓶子和捞瓶子来匿名交友。
  • 查看附近的人:微信将会根据您的地理位置找到在用户附近同样开启本功能的人。(LBS功能)
  • 语音记事本:可以进行语音速记,还支持视频、图片、文字记事。
  • 微信摇一摇:是微信推出的一个随机交友应用,通过摇手机或点击按钮模拟摇一摇,可以匹配到同一时段触发该功能的微信用户,从而增加用户间的互动和微信粘度。
  • 群发助手:通过群发助手把消息发给多个人。
  • 微博阅读:可以通过微信来浏览腾讯微博内容。
  • 流量查询:微信自身带有流量统计的功能,可以在设置里随时查看微信的流量动态。
  • 游戏中心:可以进入微信玩游戏(还可以和好友比高分)例如“飞机大战”。
  • 微信公众平台:通过这一平台,个人和企业都可以打造一个微信的公众号,可以群发文字、图片、语音三个类别的内容。目前有200万公众账号。
  • 微信在IPhone、Android、Windows Phone、Symbian、BlackBerry等手机平台上都可以使用,并提供有多种语言界面。

wxPay 模块优化了 weiXin 模块的支付功能。

wxPay 封装了微信支付的 SDK,可实现微信支付功能;使用之前须从微信开放平台申请获得 appid、secret(用于获取 access_token)、partnerkey(微信公众平台商户模块生成的商户密钥)。

不能同时添加的模块:pingpp, ipayNow

本模块封装了两套支付方案:

  • 方案一:开发者通过 getOrderId、payOrder 自己处理签名过程(微信开放平台建议把 getOrderId 放在服务器端执行);

  • 方案二:通过 config 接口和 pay 接口把签名过程交予模块内部处理。config 接口的参数可通过 key.xml 文件配置。(本支付方案用于开发阶段测试验证账号的正确性,正式发版时请使用支付方案一)

使用此模块之前需先配置 config.xml 文件,方法如下

  • 名称:wxPay
  • 参数:urlScheme、apiKey、apiSecret
  • 配置示例:
  <feature name="wxPay">
    <param name="urlScheme" value="wxd0d84bbf23b4a0e4"/>
    <param name="apiKey" value="wxd0d84bbf23b4a0e4"/>
    <param name="apiSecret" value="a354f72aa1b4c2b8eaad137ac81434cd"/>
  </feature>
  • 字段描述:

    urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动微信客户端,也可以从微信客户端跳回本应用。urlScheme 的 value 值是从微信开放平台获取的 appid。appid 申请方法参考微信开放平台接入文档

    apiKey:(必须配置)从微信开放平台获取的 appid,值与 urlScheme 相同。appid 申请方法参考微信开放平台接入文档

    apiSecret:从微信开放平台获取的 secret。获取支付 token 需要配置此项。token 申请方法参考微信开放平台接入文档

key.xml 配置详解:

key.xml 文件(适用于支付方案二、支付方案一忽略本文件)需要放在 widget/res 文件目录下,格式如下:

<?xml version="1.0" encoding="UTF-8" ?>
<security>
  <item name="wxPay_appId" value="wxd0d84bbf23b4a0e4"/>
  <item name="wxPay_mchId" value="1234567890"/>
  <item name="wxPay_partnerKey" value="***"/>
  <item name="wxPay_notifyUrl" value="***"/>
  <item name="其它服务需加密的参数配置 " value="***"/>
  .
  .
  .
</security>
  • 字段描述:

    wxPay_appId:在微信开发者平台创建应用生成的 appId

    wxPay_mchId:商户号,填写商户对应参数

    wxPay_partnerKey:商户API密钥,务必同在商户平台->账户设置->API安全里填写的密钥保持一致,此密钥是根据微信对商户密钥的规范自己生成的

    wxPay_notifyUrl:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数

getOrderId

获取预支付订单号(适用于支付方案一)

getOrderId({params}, callback(ret, err))

params

info:

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    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 wxPay = api.require('wxPay');
wxPay.getOrderId({
    info: ''
}, function(ret, err) {});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

payOrder

支付订单(适用于支付方案一)

payOrder({params}, callback(ret, err))

params

apiKey:

  • 类型:字符串
  • 描述:(可选项)从微信开放平台获取的 appid,若不传则从当前 widget 的 config.xml 中读取。

orderId:

  • 类型:字符串
  • 描述:getOrderId 获取的订单号 (prepay_id)

mchId:

  • 类型:字符串
  • 描述:商家和微信合作的 id 号,审核通过后微信服务器会发送到商家邮箱

nonceStr:

  • 类型:字符串
  • 描述:随机字符串,防重发

timeStamp:

  • 类型:字符串
  • 描述:时间戳,防重发

package:

  • 类型:字符串
  • 描述:(可选项)扩展字段,暂填写固定值Sign=WXPay
  • 默认:Sign=WXPay

sign:

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status: true    //布尔型;true||false
}

err:

{
    code: 1     //数字类型;
                //错误码:
                //-2(用户取消,发生场景:用户不支付了,点击取消,返回APP)
                //-1(未知错误,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等)
                //1 (apiKey值非法)
}

示例代码

var wxPay = api.require('wxPay');
wxPay.payOrder({
    apiKey: '',
    orderId: '',
    mchId: '',
    nonceStr: '',
    timeStamp: '',
    package: '',
    sign: ''
}, function(ret, err) {
    if (ret.status) {
        //支付成功
    } else {
        alert(err.code);
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

config

配置模块内部处理签名时需要的参数(适用于支付方案二)

config({params}, callback(ret, err))

params

apiKey:

  • 类型:字符串
  • 描述:(可选项)从微信开放平台获取的 appid,若不传则从当前 widget 的 config.xml 中读取。

mchId:

  • 类型:字符串
  • 描述:(可选项)商家和微信合作的 id 号,审核通过后微信服务器会发送到商家邮箱,若不传或者传空则从 key.xml 中读取

partnerKey:

  • 类型:字符串
  • 描述:(可选项)商户 API 密钥,务必同在商户平台->账户设置->API安全里填写的密钥保持一致,此密钥是根据微信对商户密钥的规范自己生成的,若不传或者传空则从 key.xml 中读取

notifyUrl:

  • 类型:字符串
  • 描述:(可选项)支付结果回调页面,若不传或者传空则从 key.xml 中读取

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status: true   //布尔型;true||false
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    code: 1     //数字类型;错误码
                //-1(未知错误)
                //1(apiKey 值非法)
                //2(mchId 值非法)
                //3(partnerKey 值非法)
                //4(notifyUrl 值非法)
}

示例代码

var wxPay = api.require('wxPay');
wxPay.config({
    apiKey: '',
    mchId: '',
    partnerKey: '',
    notifyUrl: ''
}, function(ret, err) {
    if (ret.status) {
        alert('配置商户支付参数成功');
    } else {
        alert(err.code);
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

pay

支付订单(适用于支付方案二)

pay({params}, callback(ret, err))

params

description:

  • 类型:字符串
  • 描述:商品或支付订单简要描述

totalFee:

  • 类型:字符串
  • 描述:订单总金额,只能为整数,单位:分(¥)

tradeNo:

  • 类型:字符串
  • 描述:商户系统内部的订单号,32个字符以内,可包含字母,其他说明见商户订单号

spbillCreateIP:

  • 类型:字符串
  • 描述:(可选项)APP 和网页支付提交用户端 IP,Native 支付填调用微信支付 API 的机器 IP
  • 默认值:196.168.1.1

deviceInfo:

  • 类型:字符串
  • 描述:(可选项)终端设备号(门店号或收银设备 ID),注意:PC 网页或公众号内支付请传 "WEB"

detail:

  • 类型:字符串
  • 描述:(可选项)商品名称明细列表

attach:

  • 类型:字符串
  • 描述:(可选项)附加数据,在查询 API 和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据

feeType:

  • 类型:字符串
  • 描述:(可选项)符合 ISO 4217标准的三位字母代码,其他值列表详见货币类型
  • 默认:CNY(人民币)

timeStart:

  • 类型:字符串
  • 描述:(可选项)订单生成时间,格式为 yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则

timeExpire:

  • 类型:字符串
  • 描述:(可选项)订单失效时间,格式为 yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则注意:最短失效时间间隔必须大于5分钟

goodsTag:

  • 类型:字符串
  • 描述:(可选项)商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠

productId:

  • 类型:字符串
  • 描述:(可选项)trade_type=NATIVE ,此 id 为二维码中包含的商品 ID,商户自行定义,详见商户平台开发者文档

openId:

  • 类型:字符串
  • 描述:(可选项)trade_type=JSAPI ,用户在商户 appid 下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的 Openid

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    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 wxPay = api.require('wxPay');
wxPay.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及更高版本