需求:需要用余额、支付宝、微信支付方式支付会员,余额支付显示余额其余支付不显示余额。余额点支付直接成功或失败,支付宝/微信支付弹出相应的二维码。支付接口为同一个,但要处理三种情况。
用到了ajax的complete,return一个对象再进行判断。

接口:
/shared/profile/getBalance获取余额
/shared/profile/viporder支付
/fund/paycallback/selecttradeno订单号

html部分

<!-- vip开通 -->
<div class="recharge" data-role="vip-pay-box" style="display:none"><div class="recharge-money" data-typeval="30">应付金额:<b data-role="pay-money"><?= $oneprice?></b>元</div><div class="vip-payment"><div class="active" data-type="30">余额支付<i class="active"></i><b class="active">✔</b></div><div data-type="10">支付宝支付<i></i><b>✔</b></div><div data-type="20">微信支付<i></i><b>✔</b></div></div><div class="vip-balancebox">余额:<span class="vip-balance"></span> 元</div><div style="color:red">提示:支付成功后,请在手机或pad退出微课宝账号,重新登录使用会员功能</div>
</div>
<!-- vip开通 --><!--VIP 充值方法-->
<div data-role="zfbpay-qrocde" style="display:none;height:210px"><div class="vip-ali"><i class="ali_qrcode"></i><p>支付宝扫一扫支付</p></div>
</div>
<div data-role="wxpay-qrocde" style="display:none;height:210px"><div class="vip-wechat"><i class="wx_qrcode"></i><p>微信扫一扫支付</p></div>
</div>

css部分

/* 会员支付方式 */
.vip-payment{display: flex;justify-content: space-around;align-items: center;margin-bottom: 25px;
}
.vip-payment div{flex-direction: column;width: 30%;line-height: 35px;text-align: center;border: 1px #ccc solid;border-radius: 3px;cursor: pointer;position: relative;
}
.vip-payment div.active{border:1px red solid;
}
.vip-payment div i{width: 0;height: 0;border-bottom: 20px solid red;border-left: 22px solid transparent;position: absolute;right: 0;bottom: 0;display: none;
}
.vip-payment div i.active,
.vip-payment div b.active{display: block;
}
.vip-payment div b{color: #fff;position: absolute;right: 0;bottom: 2px;font-weight: normal;line-height: 10px;display: none;
}
.vip-balancebox{margin-bottom: 20px;display: none;
}

js部分

1、默认为余额支付方式
2、点击支付获取支付方式

1、默认为余额支付方式:获取$('.recharge-money').attr('data-typeval')的值,如果为30(余额)就显示剩余余额,反之。

//会员选择支付方式
var vipPaytype = $('.recharge-money').attr('data-typeval');
if(vipPaytype == '30'){$('.vip-balancebox').show();
}else{$('vip-balancebox').hide();
}

2、点击支付获取支付方式:添加样式,获取当前点击的data-type的值,判断是余额还是支付宝还是微信,并赋值给$('.recharge-money')

$('.vip-payment div').click(function(){$('.vip-payment div').removeClass("active").find("i,b").hide();$(this).addClass("active").find("i,b").show();var vipPaytype = $(this).attr('data-type');if(vipPaytype == '30'){console.log('余额');$('.recharge-money').attr('data-typeval','30');$('.vip-balancebox').show();}else if(vipPaytype == '10'){console.log('支付宝');$('.recharge-money').attr('data-typeval','10');$('.vip-balancebox').hide();}else{console.log('微信');$('.recharge-money').attr('data-typeval','20');$('.vip-balancebox').hide();}
});

3、制作支付宝二维码弹窗
4、制作微信二维码弹窗

//支付宝支付二维码
function zfbQRcode(tradeno){layer.open({type:1,title: '支付宝扫码支付',area: ['470px', 'auto'], //宽高content: $('[data-role="zfbpay-qrocde"]'),btn: ['支付完成'],shade:0,yes:function () {selectoder(tradeno);}});
}
//微信支付二维码
function wxQRcode(tradeno){layer.open({type:1,title: '微信扫码支付',area: ['470px', 'auto'], //宽高content: $('[data-role="wxpay-qrocde"]'),btn: ['支付完成'],shade:0,yes:function () {selectoder(tradeno);}});
}

5、支付接口
这里将ajax封装成一个pay() 的方法,通过传money和type的参数来处理不同的支付类型,这里用到了ajax自定义回调,因为余额和支付宝微信的回调不一样,当余额大于金额时余额直接成功,而支付宝微信会返回二维码。

余额成功的回调

支付宝微信回调


function pay(month,type){var index = layer.load(2);return $.post('/shared/profile/viporder',{'month': month,'type':type}).complete(function () {layer.close(index);}).fail(function () {errorMsg('网络异常,请稍后重试');});
}

6、支付成功的回调与支付失败的回调,跳转的界面不同。

var wait=10;
function showSuccessPage() {$(".vipversionsbox").hide();$(".vipversions-success").show();layer.closeAll();wait = 10;countDown();
}
function showFailPage() {$(".vipversionsbox").hide();$(".vipversions-fail").show();layer.closeAll();wait = 10;countDown();
}
//查询
function selectoder(tradeno){$.post('/fund/paycallback/selecttradeno',{'tradeno':tradeno},function(res){if(res.success){showSuccessPage();}else{showFailPage();}});
}
function countDown() {if(wait == 0){window.location.reload();return;}$('.return10 span').html(wait+"s后回到会员服务");wait--;setTimeout(function() {countDown();},1000);
}

7、获取二维码,封装成一个方法,然后传参,给到append中
返回 图片img地址
该知识点参考文档:生成对象

function createQrcodeImgObj(qrcodeUrl) {return  $('<img/>', {src: qrcodeUrl});
}

8、点击开通会员的按钮弹窗,点支付的时候判断是什么支付方式 ,传入不同的支付参数。

余额:
如果var vipPaytype = $('.recharge-money').attr('data-typeval');的vipPaytype 值为30,判断余额是否充足var balance = $('.vip-balance').text();//余额
var paymoney = $('[data-role="pay-money"]').text();//应付金额
如果balance<paymoney ,则提示余额不足,请充值或者选择其他支付方式。
如果balance>paymoney ,则pay传money和type,成功showSuccessPage()。

if(vipPaytype == '30'){if(parseInt(balance) < parseInt(paymoney)){layer.msg('余额不足,请充值或者选择其他支付方式');return;
}
pay(month,'30').success(function (res) {if(res.success == true){showSuccessPage();}else{errorMsg(res.message);}});
}

支付宝:
再append的时候要将之前的图片清空,传值获取回调里的qrcodeUrl ,然后append给$('.ali_qrcode')。成功的话弹出二维码的弹窗。

if(vipPaytype == '10'){$('.ali_qrcode').empty();pay(month,'10').success(function (res) {if(res.success == true){let qrcodeUrl = res.data.qrcode;$('.ali_qrcode').append(createQrcodeImgObj(qrcodeUrl));zfbQRcode(res.data.tradeno);$('.vip-ali').show();}else{errorMsg(res.message);}});
}

微信:
再append的时候要将之前的图片清空,传值获取回调里的qrcodeUrl ,然后append给$('.wx_qrcode')。成功的话弹出二维码的弹窗。

if(vipPaytype == '20'){
$('.wx_qrcode').empty();pay(month,'20').success(function (res) {if(res.success == true){let qrcodeUrl = res.data.qrcode;$('.wx_qrcode').append(createQrcodeImgObj(qrcodeUrl));wxQRcode(res.data.tradeno);$('.vip-wechat').show();}else{errorMsg(res.message);}});
}

完整代码:

//充值VIP$('[data-role="vip-open"]').click(function(){getBalance();var index = layer.open({type:1,title: '开通会员',area: ['470px', 'auto'], //宽高content: $('[data-role="vip-pay-box"]'),btn:["支付","取消"],yes:function () {var  month = $('[data-role="pay-age"].active').attr('data-month');var vipPaytype = $('.recharge-money').attr('data-typeval');var balance = $('.vip-balance').text();//余额var paymoney = $('[data-role="pay-money"]').text();//应付金额if(vipPaytype == '30'){if(parseInt(balance) < parseInt(paymoney)){layer.msg('余额不足,请充值或者选择其他支付方式');return;}pay(month,'30').success(function (res) {if(res.success == true){showSuccessPage();}else{errorMsg(res.message);}});}else if(vipPaytype == '10'){$('.ali_qrcode').empty();pay(month,'10').success(function (res) {if(res.success == true){let qrcodeUrl = res.data.qrcode;$('.ali_qrcode').append(createQrcodeImgObj(qrcodeUrl));zfbQRcode(res.data.tradeno);$('.vip-ali').show();}else{errorMsg(res.message);}});}else{$('.wx_qrcode').empty();pay(month,'20').success(function (res) {if(res.success == true){let qrcodeUrl = res.data.qrcode;$('.wx_qrcode').append(createQrcodeImgObj(qrcodeUrl));wxQRcode(res.data.tradeno);$('.vip-wechat').show();}else{errorMsg(res.message);}});}},btn2: function(){layer.close(index);}});});

ajax余额支付宝微信支付(多种情况调用同一个接口、jquery创建新对象设置属性)相关推荐

  1. php调用支付宝微信支付接口 免签约 实测能用

    找了很多支付宝微信支付收款的办法,接入的时候发现根本不靠谱,终于实测到了一个可以用的,(验证效果不用改代码,php环境下Demo.php直接打开看就行了 附件放在下面了) 支付宝收款实测有效,微信支付 ...

  2. php微信商务平台 红包调用,微信平台红包接口怎么调用?微信支付商户平台红包发放接口调用图文教程[多图]...

    微信平台红包接口怎么调用?估计很多商家都还不太会操作吧?别着急,下面是友情小编搜集相关资料整理出来的微信支付商户平台红包发放接口调用图文教程,希望可以帮到大家,现在就跟随小编一起看看吧!!! 首先,商 ...

  3. springboot整合支付宝微信支付案例+代码

    springboot支付宝微信支付 每天多学一点点~ 之前写好了一篇,不下心被覆盖的,我的锅....下次写博客记得导出来!!!! 话不多说,这就开始吧- 文章目录 springboot支付宝微信支付 ...

  4. 【安卓学习之第三方库】 Rxpay学习:支付宝微信支付

    █ [安卓学习之第三方库] Rxpay学习:支付宝微信支付 █ 相关文章: [安卓学习之第三方库]库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例) [安卓学习之第三方库] 消息 ...

  5. android支付宝支付微信支付封装,Android仿支付宝微信支付密码界面弹窗封装dialog...

    一,功能效果 二,实现过程 1,先写xml文件:dialog_keyboard.xml 注意事项 (1),密码部分用的是一个线性布局中6个TextView,并设置android:inputType=& ...

  6. MongoDB Ubuntu安装 APP 支付宝微信支付

    mongo安装: 1.apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 2.echo "deb ht ...

  7. 个人申请支付宝微信支付接口教程(无需营业执照)

    提示:以下教程只适用于自己申请的微信支付,如果您已成功申请微信支付的通过微信认证的服务号,您可以按照以下教程操作,如果您是未认证的服务号,或者还未成功申请微信支付服务号,您只能使用系统代收的方式. 以 ...

  8. WooCommerce接入支付宝微信支付

    WooCommerce接入支付宝微信支付 前言 安装支付宝插件(方法一) 安装配置 获取注册信息 安装支付宝插件(方法二) 安装微信支付插件 下载及安装 获取微信公众号APPID,微信支付密钥 获取微 ...

  9. 浅析微信支付:5统一下单接口

    1.什么是[统一下单接口]? 首先我们要明白这个问题,需要先行看一下微信的官方文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter= ...

最新文章

  1. 车联网APP,安全设施薄弱的山寨品
  2. openNebulafrontEnd ComputeNode 配置记录
  3. 网站排名优化看技巧!
  4. Linux集群系统Heartbeat
  5. linux 域名 都访问了 哪些路由,Ngnix管理域名路由
  6. 使用函数指针实现父类函数调用子类函数的两种方式
  7. Android游戏开发系统控件-Dialog
  8. Linux允许61440端口,释放对某端口的占用
  9. vue项目打包:npm run build 进程卡死
  10. homestead 安装mysql8_homestead安装php redis扩展
  11. SpaceX再获美国宇航局价值1.525亿美元合同
  12. Building Document Workflows in SharePoint 2007 翻译
  13. 微信小程序插件wxParse的使用
  14. python怎么打开cmd-python中调用cmd
  15. 操作系统与计算机组织基本知识(一)
  16. 【标题】视频标注软件DARKLABEL V2.4 主页中英对照图
  17. 【笔记】获取中国电信家庭宽带烽火光猫HG221GS超级管理密码的方法步骤
  18. 利用Mavros控制无人机
  19. CCM5.0 应用实例(SIP X-lite)
  20. Hdu 5445 Food Problem 多重背包

热门文章

  1. 侯捷 C++内存管理 (一)
  2. 【调剂】华侨大学计算机科学与技术学院2023年硕士研究生招生调剂信息
  3. 从简历被拒到收割今日头条 offer ,我花了一年时间
  4. 如何求C语言字符串长度(strlen函数和sizeof关键字)
  5. ES6:字符串转数组
  6. 小米10和荣耀30Pro哪个好
  7. javascript中数组的sort()方法与比值函数
  8. 2014年十大优秀免费空间排行-稳定,速度,可靠和专业的免费主机空间
  9. java https下载文件
  10. linux kill nginx进程号,linux环境停止和启动nginx