# 微信支付只针对与企业(营业执照)开发,不针对于个人开发
微信支付官网:pay.weixin.qq.com
第一步前期准备:
1 服务号申请:微信公众平台 (qq.com)、:得到 app_id:服务号id,app_secret:服务号秘钥。
注册成功之后,扫描登录,左侧有个基本配置,有开发者AppID和秘钥。
2 商户申请: 申请完后,绑定一个微信作为管理员,可以通过管理员登录到微信的商户的后
台,查看 mch_id:商户的id, mch_secret: 商户的秘钥,证书。
申请成功之后,微信扫描登录,点击我的账号,点击登录的账号,API安全,就可以拿到证书
秘钥,商户ID就是登录的账号。证书退款的时候需要使用。
3 已被备案的服务器和域名。
第二步:微信支付的分类:pc版的扫支付二维码, h5或者app唤起微信app支付 线下扫二维码、
1 pc端扫码支付:大概流程 后端获取商品id, 生成订单,请求微信支付的接口返回url地址,
前端将url地址生成二维码支付,支付成功后微信服务端会给后端发送一个请求post请求,
来响应本次支付的状态。 前端如果想要获取支付的结果就需要不断的去轮询自己后端的
接口,看是否有微信响应的信息。
const md5 = require('md5') // 导入md5
const tenpay = require('tenpay') // 引入微信支付的插件
const config = { // 对微信支付插件的基本配置
appid: '公众号ID', // 服务号ID
mchid: '微信商户号', // 商户的ID
partnerKey: '微信支付安全密钥', // 商户的秘钥
pfx: require('fs').readFileSync('证书文件路径'), // 退款的时候使用,没有退款可以注释掉
notify_url: '支付回调网址', // 当用户支付成功,微信的服务器会给开发者服务发post请求告知支
付的状态: https://api.jinfangtong.cn/notry
spbill_create_ip: 'IP地址' // 网站ip
};
const api = new tenpay(config, true);
定义一个接收腾讯支付状态返回来的一个地址:
app.post('./notry',api.middlewareForExpress('pay'),(req,res)=>{
let info = req.weixin
console.log(info,'用户付款后 微信发送的请求给开发者的服务器')
res.reply('错误信息')
})
// 这里是发起支付创建订单 返回链接的接口
app.get('/goods/buy',(req,res)=>{
const {id} = req.body // 获取商品的id
// 第一步 生成一个订单号 可以借用MD5来生成 npm i md5
const trado_no = md5( Math.randow()+new Date())
// 第二步 调用微信支付的API去腾讯系统下单 建议使用tenpay这个插件来使用 npm i tenpay;
// 使用统一下单API可直接获取code_url, 需自行生成二维码图片
let {prepay_id, code_url} = await api.unifiedOrder({
out_trade_no: '商户内部订单号', // trado_no
body: '商品简单描述', // 运动服装
total_fee: '订单金额(分)', // 1 代表分
openid: '用户openid', // pc端用不到 可以删掉
trade_type: 'NATIVE', // NATIVE表示返回一个可以生成支付二维码的URL链接
product_id: '商品id' // 商品id
});
res.send({url:code_url}) // 将二维码链接返回给前端
})
前端需要将接收回来的url链接转化为二维码。
2 h5支付:产品介绍-H5支付 | 微信支付商户平台文档中心 (qq.com);
支付的流程:客户端点击下单操作将相关数据信息传递给自己的后端,自己的后端会生一个
订单号,自己的后端再拿着订单号商户的id签名等去请求微信的后端,这时候微信后端会返回
一个链接给我们自己的后端,自己的后端再返回给我们,我们点击这个链接,就可以直接跳
转到微信的支付。支付成功的后,微信后端会把支付成功的结果发送给我们自己的后台,我
们再向自己的后端请求支付的结果。(不能在微信内部打开这个链接,必须在外部浏览器打
开才能使用。
// app移动端h5端仅需要将生成二维码NATIVE的标识换成h5或者移动端的MWEB就可以了,这时候后端会返回一个链接。
// 前端只需要将这个链接赋值给a标签。 然后就可以点击a标签跳转到微信支付了
// 这里是发起支付创建订单 返回链接的接口
app.get('/goods/buy',(req,res)=>{
const {id} = req.body // 获取商品的id
// 第一步 生成一个订单号 可以借用MD5来生成 npm i md5
const trado_no = md5( Math.randow()+new Date())
// 第二步 调用微信支付的API去腾讯系统下单 建议使用tenpay这个插件来使用 npm i tenpay;
// 使用统一下单API可直接获取code_url, 需自行生成二维码图片
let {prepay_id, mweb_url} = await api.unifiedOrder({
out_trade_no: '商户内部订单号', // trado_no
body: '商品简单描述', // 运动服装
total_fee: '订单金额(分)', // 1 代表分
openid: '用户openid', // pc端用不到 可以删掉
trade_type: 'MWEB', // NATIVE表示返回一个可以生成支付二维码的URL链接 MWEB是h5链接
product_id: '商品id' // 商品id
});
res.send({url:mweb_url}) // 将二维码链接返回给前端
})
3 小程序支付:
小程序支付 需要将appid由服务号的换成微信小程序的appid
const config = { // 对微信支付插件的基本配置
appid: '公众号ID', // 微信小程序的APPID
mchid: '微信商户号', // 商户的ID
partnerKey: '微信支付安全密钥', // 商户的秘钥
pfx: require('fs').readFileSync('证书文件路径'), // 退款的时候使用,没有退款可以注释掉
notify_url: '支付回调网址', // 当用户支付成功,微信的服务器会给开发者服务发post请求告知支
付的状态: https://api.jinfangtong.cn/notry
spbill_create_ip: 'IP地址' // 网站ip
};
app.get('/api/v1/xcx',async(req,res)=>{
let trado_no = md5(Math.randow()+Date.now())
let result = await api.getPayParams({
out_trade_no:'商户内部的订单号' // trado_no也就是生成的商品订单号
body:'商品的简介',
total_fee:'订单的金额(分)',
openid:'付款用户openid'
})
res.send(result)
})
前端调用这个接口接收返回的参数。 同时调用wx.requestPayment支付的功能发起微信的支付就可以了