Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    moa-plugin-wechatpublic

    moa-plugin-wechat

    npm version

    这是moajs插件,主要用于微信授权和支付,5分钟完成集成

    Features

    • getsignature 用于分享
    • 认证授权后回调函数
      • 成功回调接口(用户存在,完成授权后的工作, wechat_id)
      • 失败回调接口(用户不存在,创建用户, wechat_id)
    • oauth入口
    • pay_h5 支付

    模型

    moag wechat openid:string nickname:string sex:string language:string city:string province:string country:string headimgurl:string privilege:string created_at:string 
    

    自己用的,这些字段都是微信返回来的,如果需要,可以让用户系统和wechat模型进行1对1的绑定

    本地调试

    推荐 https://localtunnel.me

    特点:

    • nodejs写的
    • 稳定,速度也不错
    • 可以指定域名,避免每次重启导致各种设置
    npm install -g localtunnel
    lt --port 3980 -s i5ting

    记得在公众号里修改【网页授权获取用户基本信息】,为对应的req.wx.domain里对应的地址,否则无法测试的。

    如果本地测试

    • 在pay目录下放cert证书
    • 配置好wechat_config.js
    • 保证3个地址一样
      • req.wx.domain
      • 测试授权目录
      • 网页授权获取用户基本信息
    • 然后moas即可

    有的时候lt会被防火墙拦截

    $  lt --port 3980 -s i5ting
    your url is: https://i5ting.localtunnel.me
    events.js:141
          throw er; // Unhandled 'error' event
          ^
     
    Error: connection refused: localtunnel.me:46628 (check your firewall settings)
        at Socket.<anonymous> (/Users/sang/.nvm/versions/node/v4.0.0/lib/node_modules/localtunnel/lib/TunnelCluster.js:47:32)
        at emitOne (events.js:77:13)
        at Socket.emit (events.js:169:7)
        at emitErrorNT (net.js:1250:8)
        at doNTCallback2 (node.js:429:9)
        at process._tickCallback (node.js:343:17)

    这时候,暂时把防火墙关掉,效果还不错。

    配置

    在app.js里设置一下信息

    req.wx = {
      'app_id' : '',
      'app_secret' : '',
      'domain':'https://zhvplpfvfj.localtunnel.me',
      'app_token':'mengxiaoban.com',
      'enable_admin': true,
      //for pay
      'mch_id': '1229607702',
      'pfx': fs.readFileSync('./pay/cert/apiclient_cert.p12'), //微信商户平台证书
      callback:{
        success : '/wechats',
        failed  : '/404'
      }
    }
    

    注意callback是微信授权后的回调地址

    • success是成功后,参数会带wechat_id
    • failed是失败后的处理

    微信设置

    • 公众号->微信支付->公众号支付->测试授权目录
    • 公众号->开发者中心->网页服务->网页账号->网页授权获取用户基本信息

    如果是产品模式,还要注意安全域名

    测试授权目录说明

    当前目录是

    测试授权目录

    API

    OAuth接口

    http://127.0.0.1:3029/wechats/oauth

    • 请求:get
    • 参数:无

    OAuth callback

    callback_attr是配置项里的自定义callback返回字段

    默认设置,如下

    callback:{
      url     : '/wechats/callback',
      attr    : '_id',
      success : '/wechats',
      failed  : '/404'
    }
     
    /wechats/

    如果想返回openid,对应的回调地址也要改,以为/wechats/的定义/wechats/:id 如下是内置的根据openid查询的方法

    callback:{
      url     : '/wechats/callback',
      attr    : 'openid',
      success : '/wechats',
      failed  : '/404'
    }
     
     
    /wechats/openid

    请求定义

    • /wechats/:id
    • /wechats/openid/:id

    OAuth callback with query string

    callback:{
      url     : '/wechats/callback2',
      attr    : '_id',
      success : '/wechats',
      failed  : '/404'
    }

    https://i5ting2.localtunnel.me/wechats/oauth?a=1&b=2

    redirect to

    /wechats/:id

    GET /wechats/:id => show, query: {"a":"1","b":"2"}, params: {"id":"55dfa5163d2cfc67c1736fdf"}

    公众号支付 (JS API)接口

    http://127.0.0.1:3029/wechats/pay_h5/

    公众号支付 (JS API)

    • 请求:get
    • 参数req.params
      • id = openid
      • order_id= 订单编号
      • body = 产品名称
      • detail = 产品规格描述
      • fee = 支付费用,单位是分
      • cb_url = 回调url
    function pay_h5(){
      var ordor_id = _get_out_trade_no ();
      alert(ordor_id)
      $.get('/wechats/pay_h5?id=o12hcuKXjejDFUwxMgToaGtjtqf4&order_id=' + ordor_id + '&body=1111&detail=222222&fee=1&cb_url=/wechats/pay_calllback/'+ ordor_id, function(data){
        var r = data.data;
     
        WeixinJSBridge.invoke('getBrandWCPayRequest', r, function(res){
          if(res.err_msg == "get_brand_wcpay_request:ok"){
            alert("支付成功");
            // 这里可以跳转到订单完成页面向用户展示
          }else{
            alert("支付失败,请重试");
          }
        });
      });
    }

    在app/routes/wechats.js里,定义支付成功回调url

    • 必须是post
    • 微信服务器会给发送几次post,所以自己判断一下是否已处理,如果已处理过,忽略即可
    • 完整的对账单还是有必要和微信的对一下的,虽然一般不会有什么问题
    // path = /wechats/pay_calllback/'+ ordor_id
    router.post('/pay_calllback/:id', function(req, res, next){
      console.log(req.params.id)
      console.log('/wechats/pay_calllback post sucess')
    });  

    如果是多个模型用一个callback url,可以参数上增加模型名称

    还有一个支付结果异步通知

    see https://github.com/tvrcgo/weixin-pay#中间件

    目前还没有搞定

    status code

    • -1 please check your wechat settings with req.wx!
    • -2 当前是(req.wx.enable_admin==false),管理接口不可用

    管理

    http://127.0.0.1:3029/wechats

    需要添加一个debug选项,如果没有就不能访问管理界面的

    Keywords

    none

    install

    npm i moa-plugin-wechat

    Downloadslast 7 days

    2

    version

    1.1.0

    license

    ISC

    repository

    github.com

    last publish

    collaborators

    • avatar