微信小程序调起微信支付

news2024/12/27 12:05:52

微信支付开发文档:wx.requestPayment(Object object) | 微信开放文档

一、先有一个提交订单页面

(1)wxml

<view class="btn" bindtap="addOrder">{{btnText}}</view>

二、接入支付流程

(1)在点击提交订单的时候向后端传递商品信息、通过调取的接口返回 拿到wx.requestPayment接口所需要的参数 

 addOrder(){
    let that=this
	 request.request('POST','接口地址',this.data.form).then(function(result){
      if(result.data){
        that.setData({
          orderNumber:result.data.orderNumber
        })
        //appid存在为付费订单,免费订单仅返回orderNumber
        if(result.data.appId){
          result.data.paySign=result.data.sign
          that.jsapiPay({
            ...result.data,
          });
        }else{
          //免费订单直接跳转到支付详情
          that.submitSuccess()
        }
      }
		},function(res){
			wx.showToast({
				title: res.msg,
				icon: 'none'
			})
		});
  },

(2)wx.requestPayment 接收参数 调起支付

// jsapi方式支付
  jsapiPay: function(param) {
    const that = this;
    console.log(param);
    wx.requestPayment({
      ...param,
      success (res) { 
        console.log(res,'--success');
        // 支付成功
        that.submitSuccess()
      },
      fail (res) { 
        console.log(res,'fail-----------');
        if (res.errMsg == 'requestPayment:fail cancel') {
          // 用户取消支付
          that.submitCancel()
          return;
        }
        that.submitFail()
      }
    })
  },

 (3)用户取消支付

  // 用户取消支付,返回进入的页面
  submitCancel: function() {
    try {
      wx.hideLoading()
    } catch(e){}
    setTimeout(() => {
      wx.showToast({
        title: "购买失败",
        // icon: 'success',
        icon: 'none',
        duration: 1000
      });
    }, 500)
    // setTimeout(() => {
    //   // 返回确认订单页面
    //   wx.navigateBack()
    // }, 1500);
  },

(4)用户支付失败 

 // 支付失败
    submitFail: function(err) {
      const that = this;
      try {
        wx.hideLoading()
      } catch(e){}
      setTimeout(() => {
        wx.showToast({
          title: err || "订单支付失败,请重新支付",
          // icon: 'success',
          icon: 'none',
          duration: 1000
        });
      }, 500)
      that.setData({btnText : "重新支付"})
    },

(5)支付成功 

  // 购买成功之后跳转到详情页
  submitSuccess: function() {
    const that = this;
    wx.redirectTo({
      url: `/pages/orderCenter/orderSuccess/orderSuccess?orderNumber=${that.data.orderNumber}`,
    })
  },

三、js完整代码

var request = require('../../../utils/request');
import { detail} from "../../../utils/api/index";
Page({

  /**
   * 页面的初始数据
   */
  data: {
    headerOpt:{
      showGoHome:false,
      title:"确认订单",
    },
    btnText:'提交订单',
    form:{},
    detailInfo:{},
    orderNumber:''//订单编号
  },
  addOrder(){
    let that=this
	 request.request('POST','接口地址',this.data.form).then(function(result){
      if(result.data){
        that.setData({
          orderNumber:result.data.orderNumber
        })
        //appid存在为付费订单,免费订单仅返回orderNumber
        if(result.data.appId){
          that.jsapiPay({
            ...result.data,
          });
        }else{
          //免费订单直接跳转到支付详情
          that.submitSuccess()
        }
      }
		},function(res){
			wx.showToast({
				title: res.msg,
				icon: 'none'
			})
		});
  },
  // jsapi方式支付
  jsapiPay: function(param) {
    const that = this;
    console.log(param);
    wx.requestPayment({
      ...param,
      success (res) { 
        // 支付成功
        that.submitSuccess()
      },
      fail (res) { 
        if (res.errMsg == 'requestPayment:fail cancel') {
          // 用户取消支付
          that.submitCancel()
          return;
        }
        that.submitFail()
      }
    })
  },
  
  // 购买成功之后跳转到详情页
  submitSuccess: function() {
    const that = this;
    wx.redirectTo({
      url: '',
    })
  },
    // 用户取消支付,返回进入的页面
  submitCancel: function() {
    try {
      wx.hideLoading()
    } catch(e){}
    setTimeout(() => {
      wx.showToast({
        title: "购买失败",
        // icon: 'success',
        icon: 'none',
        duration: 1000
      });
    }, 500)
    // setTimeout(() => {
    //   // 返回确认订单页面
    //   wx.navigateBack()
    // }, 1500);
  },
    // 支付失败
    submitFail: function(err) {
      const that = this;
      try {
        wx.hideLoading()
      } catch(e){}
      setTimeout(() => {
        wx.showToast({
          title: err || "订单支付失败,请重新支付",
          // icon: 'success',
          icon: 'none',
          duration: 1000
        });
      }, 500)
      that.setData({btnText : "重新支付"})
    },
  //获取对应的支付信息
  getDetail(id){
    detail(id).then((res)=>{
      // console.log(res);
      if(res.data){
        this.setData({
          detailInfo:res.data
        })
        let price=this.data.form.type==1?res.data.twPrice:res.data.spPrice
        // 处理小数点
        this.dealNum(price);
      }
    })
  },
  dealNum: function(price) {
    let arr = (price + "").split(".");
    this.setData({
      'detailInfo.current': arr[0],
    })
    if (arr[1]) {
      this.setData({
        'detailInfo.point': arr[1],
      })
    }
    this.setData({
      'detailInfo.current': arr[0],
      'detailInfo.point': arr[1],
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if(options.form){
      let form=JSON.parse(decodeURIComponent(options.form))
      this.setData({
        form:form
      })
      this.getDetail(form.id)
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

element-ui 图片压缩上传

picture.js export const compressImgNew (file) > {return new Promise(resolve > {const reader new FileReader()const image new Image()image.onload (imageEvent) > {const canvas document.createElement(canvas) // 创建画布const context canvas.getCo…

工控机连接Profinet转Modbus RTU网关与水泵变频器Modbus通讯配置案例

Profinet转Modbus RTU网关是一个具有高性能的通信设备&#xff0c;它能够将工控机上的Profinet协议转换成水泵变频器可识别的Modbus RTU协议&#xff0c;实现二者之间的通信。通过这种方式&#xff0c;工控机可以直接控制水泵变频器的运行状态&#xff0c;改变其工作频率&#…

获取钉钉机器人的token及secret

一、下载安装 app不能自定义机器人&#xff0c;要客户端才行 二、进入组织/团队 三、创建群聊 1、发起群聊 2、创建内存群 群聊是内部的才行&#xff0c;只有内部的才支持自定义机器人 3、选中联系人 4、进入群设置 四、创建自定义机器人 1&#xff09; 进入机器人页面 2&…

工程云平台源码 建筑工地劳务实名制、危大工程监管平台源码

智慧工地的核心是数字化&#xff0c;它通过传感器、监控设备、智能终端等技术手段&#xff0c;实现对工地各个环节的实时数据采集和传输&#xff0c;如环境温度、湿度、噪音等数据信息&#xff0c;将数据汇集到云端进行处理和分析&#xff0c;生成各种报表、图表和预警信息&…

TSINGSEE风电场可视化智能视频集控监管系统,助力风电场无人值守监管新模式

一、方案背景 风能作为一种清洁的可再生能源&#xff0c;对于我国实现“双碳”目标尤为重要。风电场一般地处偏远地区&#xff0c;占地广、面积大&#xff0c;并且风机分布区域广泛、现场运行设备巡视难度大、及时性差。原有的监管系统智能化水平低&#xff0c;满足不了日常的…

腾讯待办关停什么意思?可替代的待办提醒软件来了

对于国内的成年人来说&#xff0c;几乎每个人都有至少一个微信账号要和亲朋好友、同事联系&#xff0c;而如果想要记录一些待办事项并准时接收提醒的话&#xff0c;可以直接在微信中使用“腾讯待办”这个小程序来记录待办事项并设置提醒时间。 不过值得注意的是&#xff0c;腾…

word中图片怎么批量缩小?超级简单好用!

word中图片批量缩小有两种角度进行操作&#xff0c;一种是通过批量裁剪图片进行缩小&#xff0c;一种是通过批量压缩图片进行缩小&#xff0c;下面根据这两种不同的角度介绍三种实用的方法&#xff0c;一起来看看吧&#xff5e; 方法一&#xff1a;通过批量裁剪图片缩小 1、点…

如何在脱敏数据中使用BERT等预训练模型

前几天有朋友问了一下【小布助手短文本语义匹配竞赛】的问题&#xff0c;主要是两个&#xff1b; 如何在脱敏数据中使用BERT&#xff1b;基于此语料如何使用NSP任务&#xff1b; 比赛我没咋做&#xff0c;因为我感觉即使认真做也打不过前排大佬[囧]&#xff0c;太菜了&#x…

RK3288 Android11 RTL8723DS WiFi 和 蓝牙Bluetooth 适配

目录 一、RTL8723DS WiFi 适配 --- 篇章1、原理图分析&#xff08;WiFi部分&#xff09;补充:RTL8723DS时钟输入源讲解 2、根据原理图修改设备树和编辑驱动文件3、实验验证4、RTL8723DS WIFI驱动参考文档和博客网站 二、RTL8723DS 蓝牙Bluetooth 适配 --- 篇章1、原理图分析&am…

使用 LF Edge eKuiper 将物联网流处理数据写入 Databend

作者&#xff1a;韩山杰 Databend Cloud 研发工程师 https://github.com/hantmac LF Edge eKuiper LF Edge eKuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件&#xff0c;可以运行在各类资源受限的边缘设备上。eKuiper 的主要目标是在边缘端提供一个流媒体软件…

怎样正确做 Web 应用的压力测试?

Web应用&#xff0c;通俗来讲就是一个网站&#xff0c;主要依托于浏览器来访问其功能。 那怎么正确做网站的压力测试呢&#xff1f; 提到压力测试&#xff0c;我们想到的是服务端压力测试&#xff0c;其实这是片面的&#xff0c;完整的压力测试包含服务端压力测试和前端压力测…

hue实现对hiveserver2 的负载均衡

如果你使用的是CDH集群那就很是方便的 在Cloudera Manager中&#xff0c;进入HDFS Service 进入Instances标签页面&#xff0c;点击Add Role Instances按钮&#xff0c;如下图所示 点击Continue按钮&#xff0c;如下图所示 返回Instances页面&#xff0c;选择HttpFS角色…

Jmeter测试添加凭证和导出压测结果

选中测试计划中的HTTP请求&#xff0c;右键-->添加配置元件-->HTTP信息头管理器&#xff0c;在窗口中添加 如果是post请求&#xff0c;还需在信息头管理器中添加Content-Type:application/json 导出聚合报告

数学建模——最大流问题(配合例子说明)

目录 一、最大流有关的概念 例1 1、容量网络的定义 2、符号设置 3、建立模型 3.1 每条边的容量限制 3.2 平衡条件 3.3 网络的总流量 4、网络最大流数学模型 5、计算 二、最小费用流 例2 【符号说明】 【建立模型】 &#xff08;1&#xff09;各条边的流量限制 &a…

(Python)使用Matplotlib将x轴移动到绘图顶部

移动前&#xff1a; 我们有两种方法可以实现这个目标&#xff1a; import warnings warnings.filterwarnings(ignore)import numpy as np import matplotlib.pyplot as pltcolumn_labels list(ABCD) row_labels list(WXYZ)data np.random.rand(4, 4)fig, ax plt.subplots(…

手写商用Java虚拟机HotSpot,疯狂磨砺技术中

在当前Java行业激烈竞争的形式下&#xff0c;唯有掌握技术&#xff0c;心中才不能慌。在多年前&#xff0c;我就开始苦练底层技术&#xff0c;但是眼看百遍也不如手过一遍&#xff0c;所以我打算把虚拟机的精华实现部分用手敲出来&#xff0c;这个过程注定不会轻松&#xff0c;…

基于springboot的学生宿舍管理系统(源码+LW+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

副业兼职做什么好呢?七个线上兼职线下副业可供选择

生活节奏的加快&#xff0c;人们的生活压力也与日俱增。为了缓解压力、增加收入&#xff0c;许多人都开始寻找副业兼职的机会。副业兼职不仅可以帮助我们应对经济困境&#xff0c;更可以为我们的生活注入新的乐趣和意义。但是在众多的副业兼职选择中&#xff0c;该如何找到适合…

(1)攻防世界web-Training-WWW-Robots

1.开启环境&#xff0c;查看网页 翻译一下 2.前往robots.txt 命令&#xff1a;http://61.147.171.105:57663/robots.txt 3.前往fl0g.php 命令&#xff1a;http://61.147.171.105:57663/fl0g.php 4.得到flag cyberpeace{92ec1ef9b6d900100399093b9ae9e386}

python烟花代码

下面是一个用Python编写的简单烟花特效代码&#xff0c;使用了Pygame库来实现图形显示。请确保你已经安装了Pygame库&#xff0c;如果没有安装&#xff0c;可以使用pip install pygame来安装。 import pygame import random# 初始化Pygame pygame.init()# 屏幕大小 width, hei…