微信小程序调用微信支付,不需要搭建服务器


微信小程序开发者工具最近推出了新的功能,云开发,也就是severless。提供了云函数,云数据库等等。这方便了我们进行服务端的开发,不再需要买域名,域名ICP备案,租服务器,数据库等等。当然,各有各的好处,这是无可厚非的。

关于云开发的设置,这里就不多阐述了,比较简单。

这里的云函数,使用的是Nodejs 8.9.2, 所以本意上就是写 Nodejs。


创建一个新的小程序,可选用云开发模版,然后文件目录就像下面一样,文件夹上有朵云的就是我们写云函数的地方。如果是在现有的小程序增加云函数,需要在project.config.json里面配置好文件夹路径,具体看官方文档。



首先我建了两个云函数,第一个是用来拿到用户的openid, 有了云函数,我们不需要再去wx.login拿一个5分钟有效的code,再发送请求去获取用户openid了。第二个就是微信支付的云函数。


先说第一个云函数,Login

这里就已经把用户的信息返回到 客户端了。

这里是客户端(小程序端)代码,我们调用 wx.cloud.callFunction 里面的 'login', 获取到用户的openid,存到本地数据库中,方便我们随时获取。


现在进入到第二个云函数,正如上面所说,其实写云函数就是在写Nodejs,所以如果需要引入第三方的库,需要在 package.json 里面,写入需要引入的库。(上传云函数时,千万记得把node_modules删掉

这里并不会过多讲解代码含义,因为都是根据微信支付开发文档需要的参数,一步一步去获取到所有的参数而已,并没有过多的含义,如果看不懂,请自行观看微信支付开发文档。

 下面我们进入到 index.js

```

var wechat = require('./wechat_config.js')

var body_data = require('./bodyData.js');

var non_str_random = require('./non_str_random.js')

var cryptoMO = require('crypto');

var request = require('request');

var xml2js = require('xml2js');

var xmlParser = new xml2js.Parser({ explicitArray: false, ignoreAttrs: true })

var out_trade_no = Date.parse(new Date());

var non_str = non_str_random();

exports.main = async (event, context) => {


  var payBody = 'fee';


  var str = `appid=${wechat.appid}&body=${payBody}&mch_id=${wechat.mch_id}&nonce_str=${non_str}&notify_url=${wechat.notify_url}&openid=${event.openid}&out_trade_no=${out_trade_no}&spbill_create_ip=${wechat.ip}&total_fee=${event.total_fee}&trade_type=JSAPI&key=${wechat.key}`;


  var sign = cryptoMO.createHash('md5').update(str).digest('hex');

  var temp_body_data = body_data(wechat, payBody, non_str, event.openid, out_trade_no, event.total_fee, sign);

  return new Promise( (resolve, reject) =>

    request({

      url: wechat.url,

      method: 'POST',

      body: temp_body_data

    }, (err, res, body) => {

      xmlParser.parseString(body, (err, res)=>{

        var prepay_id = res.xml.prepay_id;

        var str = `appId=${wechat.appid}&nonceStr=${non_str}&package=prepay_id=${prepay_id}&signType=MD5&timeStamp=${out_trade_no}&key=${wechat.key}`;

        var paySign = cryptoMO.createHash('md5').update(str).digest('hex');

        return resolve({

          success: true,

          data: {

            timeStamp: out_trade_no.toString(),

            nonceStr: non_str,

            package: `prepay_id=${prepay_id}`,

            paySign: paySign,

            outTradeNo: out_trade_no

          }

        });

      })

    })

  )

}

```

这里是 wechat_config.js, 根据自己的资料,填充即可。

下面是bodyData.js

这里是 non_str_random.js

到这里整个微信支付服务端的流程就结束了。(记得上传云函数后,云函数才能被使用)


下面回到小程序端(客户端)发起微信支付申请

this.data.fee 根据自己去定义了,这个就是支付的金额,微信以分结算的,所以乘以100。

```

wechat_pay: function(){

      wx.cloud.callFunction({

      name: 'wechat_pay',

      data: {

        openid: wx.getStorageSync('openid'),

        total_fee: this.data.fee * 100

      },

      complete: res => {

        wx.requestPayment({

          timeStamp: res.result.data.timeStamp,

          nonceStr: res.result.data.nonceStr,

          package: res.result.data.package,

          signType: 'MD5',

          paySign: res.result.data.paySign,

        })

      }

    })

  }

```



到这里就是一个完整的微信支付流程了,文采一般,大家将就着看吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容