微信支付功能开发

# 微信支付只针对与企业(营业执照)开发,不针对于个人开发

微信支付官网: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支付的功能发起微信的支付就可以了



 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值