小程序微信支付流程(商城余额支付,优惠券支付,积分抵消,微信支付)

缓存的方式我们可以选择redis,memcache, 文件缓存等等,采用键值对(key-value)的方式进行存储,记得设置好过期时间。这里的key我们用token来赋值,token可以通过这样的方式进行生成:

//获取32位随机字符串

$str = getRandChar(32); //自定义方法生成32位随机串

//三组字符串进行md5加密

t i m e S t a m p = timeStamp = timeStamp=_SERVER[‘REQUEST_TIME_FLOAT’];

//salt

$salt = config(‘secure.token_salt’); //随机字符串

//返回token

return md5( s t r . str. str.timeStamp.$salt);

这种算法基本保障了token的唯一性。因为值是我们获取到的openID和session_key所在的数组,所以需要将数组转成json才能存进去。以后的代码当我们需要openID或者uid等时可以直接通过取缓存的方式来取。

三,调用统一下单接口,获取prepay_id,再次签名(后端完成,不详解)

在这里插入图片描述

  1. 点击‘提交订单’按钮,创建订单,清空购物车,完成支付

<van-submit-bar

price=“{{ allGoodsAndYunPrice*100 }}”

suffix-label=“+{{totalScoreToPay}} 积分”

button-text=“提交订单”

bind:submit=“goCreateOrder”

/>

  1. 创建订单,清空购物车,调用支付函数

const wxpay = require(‘…/…/utils/pay.js’)’

//去创建订单

goCreateOrder(){

//检测实名认证状态

//创建订单

this.createOrder(true)

}

//创建订单

createOrder(){

var that = this;

var loginToken = wx.getStorageSync(‘token’) // 用户登录 token

var remark = this.data.remark; // 备注信息

let postData = { //创建订单需要的参数

token: loginToken,//token

goodsJsonStr: that.data.goodsJsonStr, //购买的商品数据列表

remark: remark,//备注信息

peisongType: that.data.peisongType// // 配送方式 kd,zq 分别表示快递/到店自取

};

//调用创建订单接口,传递此次订单相关数据

WXAPI.orderCreate(postData).then(function (res) {

that.data.pageIsEnd = true

if (res.code != 0) {

that.data.pageIsEnd = false

wx.showModal({

title: ‘错误’,

content: res.msg,

showCancel: false

})

return;

}

if (“buyNow” != that.data.orderType) { //订单类型,购物车下单或立即支付下单,默认是购物车,

// 清空购物车数据

WXAPI.shippingCarInfoRemoveAll(loginToken)

}

that.setData({

totalScoreToPay: res.data.score, //积分

isNeedLogistics: res.data.isNeedLogistics, 是否需要物流信息

allGoodsAndYunPrice: res.data.amountReal,//总价=总商品价+总运费

yunPrice: res.data.amountLogistics,//运费

hasNoCoupons,//没有优惠券

coupons,//优惠券

couponAmount: res.data.couponAmount //优惠金额

});

that.data.pageIsEnd = false

return;

}

//创建订单后的操作

that.processAfterCreateOrder(res)

})

//创建订单后的操作

async processAfterCreateOrder(res) {

// 直接弹出支付,取消支付的话,去订单列表

const balance = this.data.balance

if (balance || res.data.amountReal*1 == 0) {

// 有余额

const money = (res.data.amountReal * 1 - balance*1).toFixed(2)

if (money <= 0) {

// 余额足够

wx.showModal({

title: ‘请确认支付’,

content: 您当前可用余额¥${balance},使用余额支付¥${res.data.amountReal}?,

confirmText: “确认支付”,

cancelText: “暂不付款”,

success: res2 => {

if (res2.confirm) {

// 使用余额支付,传token,和订单id

WXAPI.orderPay(wx.getStorageSync(‘token’), res.data.id).then(res3 => {

if (res3.code != 0) {

wx.showToast({

title: res3.msg,

icon: ‘none’

})

return

}

wx.redirectTo({

url: “/pages/order-list/index”

})

})

} else {

wx.redirectTo({

url: “/pages/order-list/index”

})

}

}

})

} else {

// 余额不够

wx.showModal({

title: ‘请确认支付’,

content: 您当前可用余额¥${balance},仍需支付¥${money},

confirmText: “确认支付”,

cancelText: “暂不付款”,

success: res2 => {

if (res2.confirm) {

// 使用余额支付

wxpay.wxpay(‘order’, money, res.data.id, “/pages/order-list/index”);

} else {

wx.redirectTo({

url: “/pages/order-list/index”

})

}

}

})

}

} else {

// 没余额

wxpay.wxpay(‘order’, res.data.amountReal, res.data.id, “/pages/order-list/index”);

}

},

//查看用户资产

async userAmount() {

const res = await WXAPI.userAmount(wx.getStorageSync(‘token’))

if (res.code == 0) {

this.setData({

balance: res.data.balance

})

}

},

}

四,wx.requestPayment()获取五个参数后,调起支付

const WXAPI = require(‘apifm-wxapi’)

/**

  • type: order 支付订单 recharge 充值 paybill 优惠买单

  • data: 扩展数据对象,用于保存参数

*/

function wxpay(type, money, orderId, redirectUrl, data) {

WXAPI.wxpay(postData).then(function (res) {

if (res.code == 0) {

// 发起支付

wx.requestPayment({

timeStamp: res.data.timeStamp, //时间戳

nonceStr: res.data.nonceStr,//随机字符串

package: res.data.package,//订单详情扩展字符串

signType: res.data.signType//签名方式

paySign: res.data.paySign,//签名

fail: function (aaa) {

console.error(aaa)

wx.showToast({

title: ‘支付失败:’ + aaa

})

},

success: function () {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

点击这里领取Web前端开发经典面试题

大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-EAZO1Qw7-1713781081634)]

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

点击这里领取Web前端开发经典面试题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值