微服务项目之电商--28.微信支付

目录

 

3.微信支付

3.1.介绍

3.2.开发流程

3.3.生成二维码

3.3.1.生成预交易链接

3.3.2.生成二维码

3.4.付款状态查询

3.4.1.页面循环查询支付状态

3.4.2.付款成功页面


3.微信支付

3.1.介绍

微信支付官方文档:https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F

 

我们选择开发文档,而后进入选择页面:

选择扫码支付:

此处我们使用模式二来开发:

3.2.开发流程

模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL。

商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url;

商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。

注意:code_url有效期为2小时,过期后扫码不能再发起支付。

流程图:

这里我们把商户(我们)要做的事情总结一下:

  • 1、商户生成订单

  • 2、商户调用微信下单接口,获取预交易的链接

  • 3、商户将链接生成二维码图片,展示给用户;

  • 4、用户支付并确认

  • 5、支付结果通知:

    • 微信异步通知商户支付结果,商户告知微信支付接收情况

    • 商户如果没有收到通知,可以调用接口,查询支付状态

  • 6、如果支付成功,发货,修改订单状态

 

在前面的业务中,我们已经完成了:

  • 1、生成订单

接下来,我们需要做的是:

  • 2、调用微信接口,生成链接。

  • 3、并且生成二维码图片

 

3.3.生成二维码

3.3.1.生成预交易链接

我们先根据订单的编号,调用后台服务,生成交易链接,而后才能根据链接生成二维码。

在页面发起请求:

var payVm = new Vue({
    el:"#payVm",
    data:{
        ly,
        orderId:0,// 订单编号
    },
    created(){
        // 判断登录状态
        ly.http.get("/auth/verify").then(() => {
            // 获取订单编号
            this.orderId = ly.getUrlParam("orderId");
            // 获取请求链接
            ly.http.get("/order/url/" + this.orderId)
                .then(resp => {
                    console.log(resp.data);
                })
        }.catch(() => {
			// 未登录,跳转至登录页
             location.href = "/login.html?returnUrl=" + location.href;
        })
    },
    components: {
        shortcut: () => import("./js/pages/shortcut.js")
    }
});

后台已经定义好生成付款地址的接口。

刷新页面查看:

3.3.2.生成二维码

这里我们使用一个生成二维码的JS插件:qrcode,官网:https://github.com/davidshimjs/qrcodejs

 

我们把这个js脚本引入到项目中:

官方使用案例:

然后在页面引用:

页面定义一个div,用于展示二维码:

 

然后获取到付款链接后,根据链接生成二维码:

// 判断登录状态
ly.http.get("/auth/verify").then(() => {
    // 获取订单编号
    this.orderId = ly.getUrlParam("orderId");
    // 获取请求链接
    ly.http.get("/order/url/" + this.orderId)
        .then(resp => {
            new QRCode(document.getElementById("qrImage"), {
                text: resp.data,
                width: 250,
                height: 250,
                colorDark: "#000000",
                colorLight: "#ffffff",
                correctLevel: QRCode.CorrectLevel.H
            });
        })
}).catch(() => {
    // 未登录,跳转至登录页
    location.href = "/login.html?returnUrl=" + location.href;
})

刷新页面,查看效果:

此时,客户用手机扫描二维码,可以看到付款页面。

3.4.付款状态查询

跳转到支付页面后,我们等待用户付款,付款完成则跳转到付款成功页面。

3.4.1.页面循环查询支付状态

不过,因为不清楚用户何时会付款,因此这里采用循环的方式,不断请求判断是否支付成功。

// 开启定时任务,查询付款状态
const taskId = setInterval(() => {
    ly.http.get("/order/state/" + this.orderId)
        .then(resp => {
        let i = resp.data;
        if (i === 1) {
            // 付款成功
            clearInterval(taskId);
            // 跳转到付款成功页
            location.href = "/paysuccess.html?orderId=" + this.orderId;
        } else if (i === 2) {
            // 付款失败
            clearInterval(taskId);
            // 跳转到付款失败页
            location.href = "/payfail.html";
        }
    })
}, 3000);

3.4.2.付款成功页面

当付款成功后,自动跳转到付款成功页面:

 

thinkphp开源商城 含支付宝微信支付 三级分销商城: (一) 系统管理:菜单权限、前台菜单、角色管理、职员管理、登录日志、操作日志、图片空间、商城消息、风格设置、计划任务 (二) 基础设置:商城配置、导航管理、广告管理、广告位置、银行管理、支付管理、地区管理、友情链接、快递管理、消息模板 (三) 会员管理:会员等级、会员管理、账号管理 (四) 文章管理:文章管理、文章分类 (五) 运营管理:推荐管理、商品推荐、店铺推荐、品牌推荐、财务管理、资金管理、提现申请、结算管理、商家结算 (六) 订单管理:订单管理、订单管理、投诉管理、退款管理 (七) 店铺管理:店铺认证、开店申请、店铺管理、停用店铺 (八) 商品管理:商品管理、已上架商品、待审核商品、违规商品、商品分类、商品属性、品牌管理、商品规格、评价管理 (九) 虚拟物品自动发货:虚拟商品上架、卡密管理、自动发货 (十) 扩展管理:插件管理、钩子管理 (十一) 分销管理:分销管理菜单、分销商家列表、分销商品列表、佣金分成列表、推广用户列表 (十二) 数据分析:商品销售排行、店铺销售统计、销售额统计、销售订单统计、新增会员统计、会员登录统计 (十三) 营销管理:三级分销,商品团购,限时拍卖、微砍价、优惠券、满减、满送、满包邮、签到送积分、积分商城 (十四) 微信管理:公众号设置、自定义菜单、用户管理、主动回复文本信息、主动回复图文信息、微信消息模板 (十五) 支付管理:支付宝支付,微信支付、银联支付、货到付款、积分支付、余额支付 (十六) 短信接口:中国网建、阿里大于 (十七) 登录接口:QQ登录、微信登录、微博登录 (十八) 物流接口:快递100接口 (十九) 其他接口:UCenter通信接口(可与社区论坛等同步登录退出)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值