当前位置: 首页 > news >正文

vue支付项目-APP微信支付功能

⭐️⭐️⭐️  作者:船长在船上
🚩🚩🚩  主页:来访地址船长在船上的博客
🔨🔨🔨  简介:CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。

🔔🔔🔔   感谢:如果觉得博主的文章不错或者对你的工作有帮助或者解决了你的问题,可以关注、支持一下博主。如有疑问可以留言、评论,看到后会及时回复。

 APP安卓、ios微信支付功能:

技术选型:Vue+Vant-ui

功能介绍:

1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;

2.当选择微信支付需要唤起安卓Android,调用安卓、ios苹果原生方法,传递相应的参数;

3.注意需要考虑几种情况手机上是否安装了微信

  • 未安装,提示支付失败,或者也可做其他引导功能操作;
  • 已安装,直接通过安卓、ios苹果原生方法唤起微信支付

4.可取消支付,放弃支付会返回会员页面,页面提示支付取消; 

APP支付产品介绍

简介:

APP支付是指商户通过在移动端应用APP中集成开放SDK调起微信支付模块来完成支付。目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)

应用场景。

APP支付适用于在移动端APP中集成微信支付功能的场景。商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。

APP支付API列表 

会员支付功能页面

 

 会员开通或者续费页面

 会员开通或者续费按钮:

<div class="open-btn">
          <!-- 去开通 -->
          <img src="../../assets/img/open_btn.png" v-show="memberLevel=='0'" @click="handlePayment"/>
          <!-- 去续费 -->
          <img src="../../assets/img/gopay_btn.png" v-show="memberLevel=='1'" @click="handlePayment"/>
        </div>

 商品选择和协议查看(可忽略此步骤

微信支付前进行商品选择和协议查看验证: 

    // 去开通去续费  立即支付
    handlePayment(){
      if(this.checked==false){
        this.$toast.fail("请先同意一江通VIP会员服务协议");
        return;
      }else if(this.payIndex==-1){
        this.goodsId="";
        this.$toast.fail("请选择商品");
        this.isShoosePayType = false;
        return;
      }else{
        //打开支付方式弹窗
        this.isShoosePayType = true;
      }
    },

选择支付方式弹窗

<!-- 选择支付方式 -->
      <van-popup v-model="isShoosePayType" position="bottom" closeable @close="closePayType">
        <div class="text-center orderPrice">
          <div class="priceText">订单总价</div>
          <div class="priceNumber">{{totalPrice}}元</div>
        </div>
        <div class="priceType">请选择支付方式</div>
        <van-radio-group v-model="payType" class="mt20">
          <van-cell-group>
            <van-cell title="微信" clickable @click="handleChooseWx('1')" :icon="wxico" class="payico">
              <template #right-icon>
                <van-radio name="1" />
              </template>
            </van-cell>
            <van-cell label="10亿用户都在用,真安全,更放心" clickable @click="handleChooseZfb('2')" :icon="zfbico" class="payico alipayIcon">
              <template #title>
                <div class="alipayTitle">
                  <span class="custom-title mr10">支付宝</span>
                  <img src="../../assets/img/alipaytj.png" class="alipaytj">
                </div>
              </template>
              <template #right-icon>
                <van-radio name="2" />
              </template>
            </van-cell>
          </van-cell-group>
        </van-radio-group>
        <van-button block type="info" size="large" color="#024ee0" class="btnBorder" @click="handleSurePay">确认支付</van-button>
        <div class="mb50"></div>
      </van-popup>

选择支付类型

handleChooseWx(payType){
  this.payType = payType;  
},

 点击确认支付,唤起安卓微信支付

注意事项:

 1.判断是否在微信内支付,需要在微信外支付

if(this.$utils.isWeiXin()){
    this.$toast.fail("请选择在微信外支付");
    return;
}

2.判断支付方式,如果是1,则是微信支付方式 

  • 安卓 微信支付原生方法:
this.wxpayBack(payResult);
  • ios苹果 微信支付原生方法:
window.webkit.messageHandlers.callNative.postMessage
  • ios函数返回处理方法callWeb(),通过此方法可以对返回的数据进行处理:
window.callWeb = this.callWeb;
  • 传递的参数:appId,partnerId,prepayId,nonceStr,timeStamp,packageValue,sign ,这里不在介绍,可查看相应的文档
  • wxCreateOrder微信APP支付下单接口

    // 点击确认支付
    handleSurePay(){
      //判断是否在微信内支付,需要在微信外支付
      if(this.$utils.isWeiXin()){
        this.$toast.fail("请选择在微信外支付");
        return;
      }else if(this.payType=="1"){
        // 微信支付H5 App
        console.log(this.payType,"选择支付方式");
        let payParams = {
          goodsId:this.goodsId,
        }
        wxCreateOrder(payParams).then(res=>{
          if(res.code == 200){
            this.isShowVip= false;
            this.isShoosePayType = false;
            console.log(res,"支付微信");
            let [appId,partnerId,prepayId,nonceStr,timeStamp,packageValue,sign] = [res.data.appId,res.data.partnerId,res.data.prepayId,res.data.nonceStr,res.data.timeStamp,res.data.packageValue,res.data.sign];
            // 调用安卓方法
            if(this.$utils.isAndroid_ios() == "andriod"){
              window.AndroidFunction.wxpay(appId,partnerId,prepayId,nonceStr,timeStamp,packageValue,sign);
              this.wxpayBack(payResult);
            }else{
              // ios
              new Promise((resolve, reject) => {
                window.webkit.messageHandlers.callNative.postMessage({
                  name: "支付-微信",
                  data: {
                    appId,
                    partnerId,
                    prepayId,
                    nonceStr,
                    timeStamp,
                    packageValue,
                    sign
                  },
                });
                resolve();
              }).then((res) => {
                  window.callWeb = this.callWeb;
              });
            }
          }else{
            this.$toast.fail("请求失败");
          }
        })
      }
    },

处理ios函数回调方法结果

// ios函数方法
    callWeb(versionIos){
      if(versionIos.name=="支付回调-微信"){
        let payResult = versionIos.data.payResult;
        this.wxpayBack(payResult);
      }
    }

处理安卓微信支付后返回的结果 

// 处理安卓微信支付后返回的结果
    wxpayBack(payResult){
      if(payResult=="0"){
        this.queryMinePageFun();//调用获取个人信息接口
        this.$toast.success("支付成功");
        
      }else if(payResult=="-2"){
        this.$toast.fail("支付取消");
        
      }else if(payResult=="-1"){
        this.$toast.fail("支付失败");
        
      }
    },

 后面会继续更新  安卓、ios苹果支付宝支付功能......

👉👉👉  欢迎来访船长在船上的博客,文章持续更新;项目功能持续迭代,项目开发测试完成会把完整代码上传码云,请及时收藏关注,方便查看。 发文不易,点赞 收藏 评论 关注一下!  

相关文章:

  • 新手如何自学python?
  • Java的日期与时间之java.time.ZonedDateTime简介说明
  • Vue整合Markdown组件+SpringBoot文件上传+代码差异对比
  • MySQL高级篇——索引简介
  • C-内存函数(大量图解,函数实现)
  • 【STM32】MDK下的C语言基础
  • web前端面试题附答案041 - 曾经一个百度面试官问我,localStorage可以存对象吗?
  • 【Linux学习】权限
  • 基于AT89C51单片机的直流数字电压表设计
  • 脚本控制向Android模拟拨打电话,发送短信,定位设置功能
  • 深度理解微服务
  • 在 ABAP 开发工具运行时错误显示界面里植入思否猫
  • Matlab激光雷达相机联合标定经验分享
  • JVM<二>JVM调优(你想要的调优都在这里了)
  • Flowable监听器动态调用Springcloud接口
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 10个确保微服务与容器安全的最佳实践
  • Travix是如何部署应用程序到Kubernetes上的
  • 记一次和乔布斯合作最难忘的经历
  • 如何选择开源的机器学习框架?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 一文看透浏览器架构
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 主流的CSS水平和垂直居中技术大全
  • No resource identifier found for attribute,RxJava之zip操作符
  • 阿里云服务器如何修改远程端口?
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​Linux·i2c驱动架构​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (1)bark-ml
  • (11)MSP430F5529 定时器B
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读11/100)Fast R-CNN
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)VC++中ondraw在什么时候调用的
  • .md即markdown文件的基本常用编写语法
  • .Net core 6.0 升8.0
  • .NET NPOI导出Excel详解
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .NET中两种OCR方式对比
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Service注解让spring找到你的Service bean
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [1204 寻找子串位置] 解题报告
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory