文章目录

  • 前言
  • 一、微信支付后端功能实现(node版)
    • 1.相关文档
    • 2.项目配置

前言

微信支付是腾讯集团旗下的第三方支付平台,致力于为用户和企业提供安全、便捷、专业的在线支付服务。以“微信支付,不止支付”为核心理念,为个人用户创造了多种便民服务和应用场景。微信支付为各类企业以及小微商户提供专业的收款能力,运营能力,资金结算解决方案,以及安全保障。用户可以使用微信支付来购物、吃饭、旅游、就医、交水电费等。企业、商品、门店、用户已经通过微信连在了一起,让智慧生活,变成了现实。

小程序实现微信支付主要有两种方式:

  • 小程序内部API,要求商户开通了小程序支付功能
  • 第三方网站

一、微信支付后端功能实现(node版)

1.相关文档

微信支付开发文档V2、V3选择:
https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml

微信小程序调用微信支付接口需要5个参数都是来源于后端接口生成的

wx.requestPayment({timeStamp: payArgs.timeStamp,nonceStr: payArgs.nonceStr,package: payArgs. package,signType:'MD5',paySign: payArgs. paySign
})

小程序ID(appld)
时间戳(timeStamp)当前的时间,从1970年1月1日00:00:00至今的秒数
随机串(nonceStr) 一个32位的随机字符串
数据包(package) prepay_id=wx2017033010242291fcfe0db70013231072
签名方式(signType)默认为MD5,也有其它支持的类型
签名字符串(paySign)

2.项目配置

node安装相关依赖

router .js

npm install koa3-wechat
npm install short-uuid
npm i raw-body
npm i redis
npm i babel-runtime@6.26.0

在路由模块中引入支付模块

const Pay = require("./pay")
const Router = require("@koa/router")
const router = new Router({prefix: '/user'
});Pay.init(router)module.exports = router

pay.js

const { wepay: WechatPay } = require('koa3-wechat');
const short = require('short-uuid');
// const fs = require('fs');
const wepay = require("../lib/wepay")
const Order = require("../models/order-model")
const wepay2 = require('../lib/wepay2')function init(router) {// post /user/my/order// 下新定单,准备支付router.post('/my/order', async ctx => {let { uid: userId, openId } = ctx.userlet { totalFee, addressId, addressDesc, goodsCartsIds, goodsNameDesc } = ctx.request.body// 为测试方便,所有金额支付数均为1分totalFee = 1let payState = 0// 依照Order模型接收参数let outTradeNo = `${new Date().getFullYear()}${short().new()}`// 获取订单的预支付信息var trade = {body: goodsNameDesc.substr(0, 127), //最长127字节attach: '支付测试', //最长127字节out_trade_no: outTradeNo, //total_fee: totalFee, //以分为单位,货币的最小金额trade_type: 'JSAPI',//NATIVEspbill_create_ip: ctx.request.ip, //ctx.request.ipopenid: openId};var params = await wepay.getBrandWCPayRequestParams(trade);let err = '', resif (params && params.package && params.paySign) {// 创建记录res = await Order.create({userId,outTradeNo,payState,totalFee,addressId,addressDesc,goodsCartsIds,goodsNameDesc})if (!res) err = 'db create error'} else {err = 'error! return null!'console.log(err);}ctx.status = 200ctx.body = {code: 200,msg: !err ? 'ok' : '',data: {res,params}}})// post /user/my/order2// 使用weixin-pay实现的接口,测试通过router.post('/my/order2', async ctx => {let { uid: userId, openId } = ctx.userlet { totalFee, addressId, addressDesc, goodsCartsIds, goodsNameDesc } = ctx.request.body// 为测试方便,所有金额支付数均为1分totalFee = 1let payState = 0// 依照Order模型接收参数let outTradeNo = `${new Date().getFullYear()}${short().new()}`console.log('outTradeNo', outTradeNo);// 获取订单的预支付信息var trade = {body: goodsNameDesc.substr(0, 127), //最长127字节out_trade_no: outTradeNo, //total_fee: totalFee, //以分为单位,货币的最小金额spbill_create_ip: ctx.request.ip, //ctx.request.ipnotify_url: 'https://rxyk.cn/apis/pay_notify', // 支付成功通知地址trade_type: 'JSAPI',openid: openId};let params = await (() => {return new Promise((resolve, reject) => {wepay2.getBrandWCPayRequestParams(trade, (err, result) => {console.log(err, result);if (err) reject(err)else resolve(result)});})})()let err = '', resif (params && params.package && params.paySign) {// 创建记录res = await Order.create({userId,outTradeNo,payState,totalFee,addressId,addressDesc,goodsCartsIds,goodsNameDesc})if (!res) err = 'db create error'} else {err = 'error! getBrandWCPayRequestParams() return null!'console.log(err);}ctx.status = 200ctx.body = {code: 200,msg: !err ? 'ok' : '',data: {res,params}}})}module.exports = {init
}

order.js

const DataTypes = require('sequelize')
const db = require("./mysql-db")module.exports = db.define("order",{id:{type:DataTypes.INTEGER(11),allowNull:false,primaryKey:true,autoIncrement:true},userId:{type:DataTypes.INTEGER(20),allowNull:false},outTradeNo:{// 微信商号单号type:DataTypes.STRING(50),allowNull:false},transactionId:{// 微信交易单号type:DataTypes.STRING(50),allowNull:true //允许为空},payState:{// 支付订单的状态,0=未支付,1=已支付,2=取消或其它type:DataTypes.INTEGER,defaultValue:0,allowNull: false},totalFee:{//总价,单位分type:DataTypes.INTEGER(11),allowNull:false},addressId:{//收货地址idtype:DataTypes.INTEGER(20),allowNull:false},addressDesc:{//收货地址总描述type:DataTypes.TEXT('tiny'),//最大长度255个字节allowNull:false},goodsCartsIds:{//购买车商品idstype:DataTypes.JSON,allowNull:false},goodsNameDesc:{//商品名称描述type:DataTypes.TEXT('tiny'),//最大长度255个字节allowNull:false}
},{indexes: [{unique: true,// 唯一索引fields: ['out_trade_no']}],underscored: true,freezeTableName:true,timestamps:true
});

wepay.js

const {wepay:WechatPay} = require('koa3-wechat');
// const short = require('short-uuid');
const fs = require('fs');// 普通商户的参数let config = {appId: '自己的APPID', // 小程序APPIDmchId: '自己的商户id',//商户idnotifyUrl: '自己的通知地址', // 支付成功通知地址partnerKey: '自己的api key', // 微信商户平台的api key,在pay.weixin.qq.com设置pfx: fs.readFileSync(__dirname + '/apiclient_cert.p12'),// passphrase: '预留信息',// 添加了无法退款
}// 初始化
let wepay = new WechatPay(config);module.exports = wepay

wepay2.js

const WXPay = require('weixin-pay')
// const short = require('short-uuid')
const fs = require('fs')const wxpay2 = WXPay({appid: "自己的APPID",//小程序APPIDmch_id: '自己的商户id',//商户idnotify_url: '自己的通知地址', // 支付成功通知地址partnerKey: '自己的api key', // 微信商户平台的api key,在 API secret,非小程序 secretpfx: fs.readFileSync(__dirname + '/apiclient_cert.p12'), passphrase: '预留信息'
});module.exports = wxpay2

【愚公系列】2022年10月 微信小程序-电商项目-微信支付后端功能实现(node版)相关推荐

  1. 【愚公系列】2022年10月 微信小程序-电商项目-微信支付小程序确认支付结果和退款功能实现(node)

    文章目录 前言 一.微信支付小程序确认支付结果和退款功能实现 1.确认支付结果 2.退款功能实现 前言 微信小程序在支付成功后会给注册的接口发消息来通知订单支付成功的状态,下面是微信和接口通信的数据格 ...

  2. 【愚公系列】2022年10月 微信小程序-电商项目-微信支付功能前申请准备工作

    文章目录 前言 一.微信支付功能实现 1.微信公众平台的准备 2.微信商户平台的准备 前言 微信支付是腾讯集团旗下的第三方支付平台,致力于为用户和企业提供安全.便捷.专业的在线支付服务.以" ...

  3. 视频教程-微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-微信开发

    微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  4. 微信小程序电商项目开发实战漫谈

    原创文章,若转载请于明显处标明出处和相关链接:https://www.toutiao.com/i6567868839856439822/,否则追究其法律责任! 2018年小程序内容电商风口已成,如果我 ...

  5. 微信小程序电商项目商品详情页开发实战之数据绑定与事件应用

    各位CSDN的朋友,我们都知道,现在微信小程序电商平台特别火爆,所以我将以一个生鲜电商项目为例,为大家讲述微信小程序的实战化开发,价值几万元的成熟项目,你可千万不要错过哦. 大家直接通过视频链接直接看 ...

  6. 微信小程序电商项目实战-前言

    各位CSDN的朋友,我们都知道,现在微信小程序电商平台特别火爆,所以我将以一个生鲜电商项目为例,为大家讲述微信小程序的实战化开发,价值几万元的成熟项目,你可千万不要错过哦. 大家直接通过视频链接直接看 ...

  7. 微信小程序电商项目源代码开放连载二三事

    大家好,我发布的微信小程序电商项目连载视频,正式进入实战化阶段了,为了让大家更好的去学习微信小程序开发,我在gitbub上面,开放了源代码.随着视频的连载更新,我会逐步将源代码进行更新. 源代码发布地 ...

  8. 【愚公系列】2022年10月 微信小程序-电商项目-小微商户支付后端功能实现(node版)

    文章目录 前言 一.小微商户支付后端功能实现(node版) 1.相关文档 2.项目配置 前言 微信支付是腾讯集团旗下的第三方支付平台,致力于为用户和企业提供安全.便捷.专业的在线支付服务.以" ...

  9. 【愚公系列】2022年10月 微信小程序-电商项目-商品购物车功能实现

    文章目录 前言 一.商品购物车功能实现 二.效果 前言 在电商的核心交易流程中,购物车是其中非常重要的一环,它承担商品加购.价格计算.促销活动展示等功能,与会员系统.商品系统.库存系统.订单系统等紧密 ...

最新文章

  1. 学习java的一些笔记(6)
  2. 六,搭建elasticsearch集群搭建
  3. 直播 | 达观数据高级技术专家杨慧宇:金融数据结构化实践
  4. BABOK - 需求管理和沟通(Requirements Management and Communication)概要
  5. Bootstrap 表单
  6. 指纹识别 java_指纹识别代码示例java
  7. Android Edittext设置软键盘输入法Enter回车键为完成按钮
  8. English Grammar(二)
  9. WECHAT 微信扫码关注公众号方法无法获取头像和昵称了
  10. 苹果和谷歌应用商店的APP搜索排名算法
  11. VS2008 工程运行时候的一个R6034问题
  12. 3套精品像素字体打包下载
  13. 什么是RAM?如何清理电脑RAM?
  14. 0.96寸OLED显示屏驱动手册(SSD1306)
  15. 轻博客只是大众喜新厌旧的产物
  16. 通过label标记实现单选框点击文字也能选中
  17. 中文书籍对《人月神话》的引用(20211020更新到125本):Perl调试技术、软件配置管理模式……
  18. 电脑查看自己IPv4地址及连接他人电脑IPv4地址
  19. UTM设备代表产品介绍
  20. 2021年SEO战略权威指南

热门文章

  1. 【新手入门】什么是量化投资?
  2. 编程水平很高的程序员是如何训练出来的?
  3. win怎么查看linux文件,Windows下查看LINUX ext2/ext3格式的三种常用方法(图解)
  4. 关于Dreamweaver CS4的6件事
  5. 在IT企业需要具有的软实力以及怎么在面试时占据优势?
  6. 关于查看不了ip地址的问题解决
  7. python实现中英文互译
  8. HIS与护理系统集成经验之我谈
  9. 仿冒美团红包木马分析报告
  10. 那些日子 我们曾走过