前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vfp+uniapp来个扫码支付功能

vfp+uniapp来个扫码支付功能

作者头像
加菲猫的VFP
发布2024-03-06 12:09:32
1070
发布2024-03-06 12:09:32
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP

一、环境准备

VFP SP2 7423 +祺佑三层开发框架

HBuilder X

看看实现效果

前端代码

代码语言:javascript
复制
<template>
    
  <view class="content">
    <view>订单号:{{ddh}}</view>
    <view>金额:{{je}}</view>
    <view>{{status}}</view>
       <button @click="getpayaddr" v-show="iscreate">生成支付二维码</button>
    <!-- <button @click="closepay">关闭支付二维码</button>      -->
     <uv-qrcode ref="qrcode" size="300px" :value="qrcodeText"></uv-qrcode>
      
    <view>
      <text v-for="(row,index) in list" >订单号{{row.orderno}} 状态:{{row.status}}<button @click="querypay(row.orderno,index)">订单查询</button>\n</text>
    </view>

  </view>
</template>

<script>
  import qiyu_ajax from '../../common/qiyu_request.js'
  export default {
    data() {
      return {
        iscreate:true,        
        je:0.01,
        ddh:"",
        qrcodeText: '',
        status:"",
        list:[],
        timer:{}
      }
    },
    onLoad() {
          
    },
    methods: {
      querypay:async function(orderno,index){
        //this.qrcodeText="";  
        
          var url="api/ctl_f2fpay.fsp?proc=queryorder"
          var senddata={        
            ddh:orderno
          }
          var mydata=await qiyu_ajax.qiyu_kv_request(url,senddata);
          console.log(mydata);
          if(mydata.errno && mydata.errno!=0){
            uni.showToast({
              title:mydata.errmsg,
              icon:"none"
            })
          return ;
          }

          this.list[index].status=mydata.status;
          
        
        
      },

            getpayaddr:async function(){        
        //获取的二维码,如果刷过一次,便会进入等待支付状态
        //扫码之后,如果用户页面关闭,还是处于等待支付状态
        //再次扫,会提示用户订单号重复,无法再行支付了。
        var date = new Date(); // 获取当前时间
        var timestamp = date.getTime(); // 转换成时间戳
        console.log(timestamp); // 打印时间戳
        this.ddh=timestamp
        var url="api/ctl_f2fpay.fsp?proc=getqrocdebypay"
        var senddata={
          je:this.je,
          ddh:timestamp
        }
        var mydata=await qiyu_ajax.qiyu_kv_request(url,senddata);
        console.log(mydata);
        if(mydata.errno && mydata.errno!=0){
          uni.showToast({
            title:mydata.errmsg,
            icon:"none"
          })
        return ;
        }
        this.qrcodeText=mydata.payurl;
        this.iscreate=false;
          this.status="等待支付",
        this.list.push({
          orderno:timestamp,
          status:"等待支付"
        })
        var _this=this;
        this.timer = setInterval(async function() {
        // 放入你自己的业务逻辑代码
          var url="api/ctl_f2fpay.fsp?proc=queryorder"
          var senddata={        
            ddh:timestamp
          }
          var mydata=await qiyu_ajax.qiyu_kv_request(url,senddata);
          console.log(mydata);
          if(mydata.errno && mydata.errno!=0){
            uni.showToast({
              title:mydata.errmsg,
              icon:"none"
            })
            return ;
          }
           
          _this.status=mydata.status;
          if(_this.status!='等待支付'){
            _this.iscreate=true;
           clearInterval(_this.timer);
           _this.timer = null;
          }
        }, 3000);
        
      }
    }
  }
</script>

<style>
  .content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }

  .logo {
    height: 200rpx;
    width: 200rpx;
    margin-top: 200rpx;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 50rpx;
  }

  .text-area {
    display: flex;
    justify-content: center;
  }

  .title {
    font-size: 36rpx;
    color: #8f8f94;
  }
</style>

后端VFP代码

代码语言:javascript
复制
DEFINE CLASS ctl_f2fpay as Session 

     PROCEDURE queryorder
      *--撤消订单
       cddh=HttpQueryParams2("ddh")
       oPay=Newobject("pay_unionpay","pay_unionpay.prg")
     oPay.mch_id=""
     oPay.paykey=""
     ?cddh
     cReturn=oPay.Pay_QueryByOrderNo(cddh)
     
       IF ISNULL(cReturn)
         ERROR oPay.msg
       ENDIF 
       
       DO CASE 
         CASE cReturn="SUCCESS"
             cReturn="支付成功"
         CASE cReturn="REFUND"
            cReturn="转入退款"
         CASE cReturn="NOTPAY"
            cReturn="等待支付"         
         CASE cReturn="CLOSED"
            cReturn="订单已关闭"         
         CASE cReturn="REVOKED/REVERSE"
            cReturn="订单已撤消"         
         CASE cReturn="USERPAYING"
            cReturn="用户支付中"         
         CASE cReturn="PAYERROR"
            cReturn="支付失败"                             
       ENDCASE                                    
       RETURN TEXTMERGE([{"errno":0,"errmsg":"ok","status":"<<cReturn>>"}])
    
   ENDPROC 

   PROCEDURE getqrocdebypay
     nJe=val(HttpQueryParams("je"))
     cddh=HttpQueryParams2("ddh")
     oPay=Newobject("pay_unionpay","pay_unionpay.prg")
  oPay.mch_id=""
  oPay.paykey=""
  *oPay.terminal_id=""
  *--金额是分
  nJe=Int(nJe*100)
  
  *lc支付码=Thisform._txt支付码.Value

  *--通知URL 目前是没有用,可以发布一个中间层来获取值
  *--可以用来上报支付流水倒是挺好的 
  *--回调URL 

  lcurl="http://wap.tenpay.com/tenpay.asp"
  lcQrstring = oPay.Pay_byQrcode(cddh,nje,lcurl)
  IF ISNULL(lcQrstring )
   ERROR oPay.msg
  ENDIF 
  ?lcQrstring 
  RETURN TEXTMERGE([{"errno":0,"errmsg":"ok","payurl":"<<lcQrstring>>"}])
   ENDPROC 
   
   
   
ENDDEFINE

反正VFP做支付也是很EASY的事情。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境准备
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档