第一次做小程序的支付,网上有很多的资料,但是不全,得找很长时间才能找到真正有帮助的资料,本着能帮助刚刚做支付的朋友的原则,同时也记录下来,方便自己以后忘记的时候,能回来看看,写这篇博客

首先,你得有小程序

去注册小程序,然后,有得到你的代码载体,最起码,小程序端和后台得能实现选择商品,确定订单的步骤,然后,一个按钮,崩!啪!输入密码,你的钱没了,哈哈哈

到了这一步了,开始说明,之前的步骤就跳过了,这个都不是大问题,点击微信支付的时候,小程序端吗,需要把商品的价格就是那个0.01元还有用户的标识(用户id或者是能找出用户openid的参数)传过去,其他的都不是支付必要的,但是是你实现支付业务需要的参数和数据,也需要传递

上面显示的是已经成功之后的弹出页面,下面是pay函数所传递的参数

//不是完整函数,上面生成订单部分省略
if($insert){//调取支付接口// 获取支付金额       $wx_pay = new Pay;//将钱数转化为分$money = $true_money*100;$result = $wx_pay->wechat_pay($openid,$result['outer_id'],$money);}

下面是引用的函数

//微信支付public function wechat_pay($openid,$trade_no,$money){//②、统一下单$input = new \WxPayUnifiedOrder();$input->SetBody('某某团');$input->SetOpenid($openid);$input->SetAttach("MMT");$input->SetOut_trade_no($trade_no);$input->SetTotal_fee($money);$input->SetTime_start(date("YmdHis"));$input->SetTime_expire(date("YmdHis", time() + 600));// $input->SetGoods_tag("test");$input->SetNotify_url("http://".$_SERVER['HTTP_HOST']."/Api/Notify/wx_notify");$input->SetTrade_type("JSAPI");$order = \WxAppPayApi::unifiedOrder($input);// $order['timestamp'] = time();// $order['package'] = "Sign=WXPay";//判断返回结果if($order['return_code'] == 'SUCCESS' && $order['result_code'] == 'SUCCESS'){$time = time();$info = '';$info = array('appId' => '',//你的appid'timeStamp' => ''.$time.'','nonceStr' => $this->nonce_str(),'package' => 'prepay_id='.$order['prepay_id'],'signType' => 'MD5',);$info['paySign'] = $this->sign($info);$return['code'] = 200;$return['msg'] = 'success';$return['list'] = $info;}else{$return['code'] = 300;$return['msg'] = 'fail';$return['list'] = $order;}        return $return;}

需要注意的是,上面的参数部分

如果有问题,就需要,一步一步的打印返回值,就是上面的$order,看order返回值来修改问题,之前,本人就是因为直接在别人的项目之上改的,appid忘记改了,导致,一直报错,最后,才发现是appid没改,哎,只怪自己才粗心。

微信支付的常量配置,找小程序所有人去要,他能进后台,可以进后台去找。

四个参数,缺一不可。

成功之后,进入小程序端

wx.requestPayment({              timeStamp: rel.timeStamp,nonceStr: rel.nonceStr,package: rel.package,signType: rel.signType,paySign: rel.paySign,//如果用户支付了,将支付成功的订单id发动到后台,将后台的订单状态改为已支付,           success() {let success = pay_success({user_id:user_id,order_id:result.order_id,money:result.money,coupon_id:result.coupon_id});uni.navigateTo({url:'/pages/order/orderDetail/orderDetail?otm='+result.order_id,//打开首页关闭其他页面success() {         uni.showToast({title: '支付成功',icon: 'success',});}})},//如果用户最后关头取消了,将订单信息和用户信息传到后台fail(){let fail = pay_fail({user_id:user_id,order_id:result.order_id,nonceStr:result.list.nonceStr,package:result.list.package,paySign:result.list.paySign,signType:result.list.signType,timeStamp:result.list.timeStamp});console.log(result.order_id)uni.navigateTo({url:'/pages/order/orderDetail/orderDetail?otm='+result.order_id,       success() {uni.showToast({title: '支付失败'});}})}
})

如果用户成功支付了,那将订单转台修改即可,改为已支付,走后面流程即可,如果是没支付,到了最后一步取消了,但是微信支付的框,确实是弹出来了,那就把传过来的信息传回到后台,专门写一个支付失败的函数,

//用户取消支付的函数public function pay_fail(){$user_id = $_POST['user_id'];$order_id = $_POST['order_id'];$nonceStr = $_POST['nonceStr'];$package = $_POST['package'];$paySign = $_POST['paySign'];$signType = $_POST['signType'];$timeStamp = $_POST['timeStamp'];//同时将返回的信息返回存入数据库$order_refund['user_id'] = $user_id;$order_refund['order_id'] = $order_id;$order_refund['nonceStr'] = $nonceStr;$order_refund['package'] = $package;$order_refund['paySign'] = $paySign;$order_refund['signType'] = $signType;$order_refund['timeStamp'] = $timeStamp;$order_refund['created_at'] = date('Y-m-d H:i:s');$order_result = Db::name('order_refund')->insert($order_refund);if($order_result){$return['code'] = 200;}else{$return['code'] = 300;}$this->ajaxReturn($return);}

腾讯默认设置的是两个小时的过期时间,我们在用户取消的时候,将数据存入数据库,当用户点击未支付的订单去支付的时候,直接去数据库通过order_id找此条数据,咱们给设置为1个小时的过期时间或者是30分钟也行,过期了,可以去请求腾讯的接口去去取消订单,或者直接不让用户点击去支付,过了两个小时自己就取消了。

小程序的支付以及取消之后再次支付相关推荐

  1. 小程序地图定位授权取消后再次授权

    更博啦,背景:webview+小程序,新增收货地址是h5页面,调的小程序地图.获取到地址后再将值带入网页中.最近写的项目中遇到地图定位弹框拒绝授权后,无法再次调起地图组件,页面显示空白,用户使用体验差 ...

  2. 小程序商家如何开通云闪付支付功能

    近日,腾讯宣布微信支付支持全量商家小程序场景开通云闪付功能.微信支付实现与云闪付的在小程序支付场景的互联互通,无论是对于小程序商家还是用户而言,都让我们的体验变得更加便捷.那么云闪付支付功能可以满足哪 ...

  3. 微信小程序与内嵌网页交互实现支付功能

    上个月,小程序开放了新功能,支持内嵌网页,所以我就开始了小程序内嵌网页之路,之前我只是个小安卓. 内嵌网页中可使用JSSDK 1.3.0提供的接口,可坑就来了,居然不支持支付接口的调用,经过一番研究, ...

  4. 微信小程序中嵌套html_微信小程序:web-view嵌套H5实现微信支付功能解决方案及填坑...

    ab7117c7d4947210c39e126a01d23ede.jpg 最近一个多月加班比较严重,偶尔休息一天也是在补睡眠+陪家人,比较长时间没有来进行总结记录了.今天不加班,开始为这段时间做的东西 ...

  5. 微信小程序内嵌H5页面实现微信支付

    背景: 在微信H5页面已经实现了微信JSAPI的网页支付,老板要求把整个业务线快速转移到微信小程序中,作为懒惰的程序员来说,直接把页面嵌套到小程序不就行了.说干就干,在小程序中设置好基本信息后,一预览 ...

  6. 微信支付 企业转账 小程序发红包 提现 发红包 企业支付等遇到的问题

    最近公司在开发一个项目,小程序抢红包,抢到的红包用户要提现.商家需要通过微信的企业转账功能打款到微信的钱包里. 开发的时候发现有几个坑,在这里和大家分享下.首先就是微信支付的开通条件. 第一个,就是个 ...

  7. 微信小程序点赞成功,取消点赞、评论。

    今天做了一个微信小程序的点赞和评论功能!人生都有第一次,没有做过是因为没有思路,如果思路明白了,自然就会了! 一.首先,我们点赞需要明白两点. 1.微信人的id,也就是本人点击成功. 2.我想要点赞哪 ...

  8. 微信小程序位置授权被取消再授权

    小程序地图插件获取授权的时候,用户点了取消,那么就会被默认无法授权,需要用wx.openSetting()方法来打开当前小程序所需要的授权,用户手动开启.(注意,这个方法只有用户自己点击才会生效,所以 ...

  9. 【微信小程序源码】独立版云贝餐饮连锁V2_2.3.9源码线传小程序,新增堂食订单,支付打印新增下单时间显示

    [全端小程序]云贝餐饮连锁V2独立版V2.3.9餐饮小程序,优化商户到款到零钱! 云贝餐饮连锁版主要基于目前比较流行小程序生态下的自助点单系统 .通过云贝餐饮连锁版系统,让中小型餐饮商家为用户提供了便 ...

  10. 微信小程序组件(车牌号输入,支付键盘,滑块验证)

    目录 车牌号输入组件 密码支付键盘组件 滑块验证组件 车牌号输入组件 如图 基于微信小程序组件封装,输出值为当前选择车牌号,可回显车牌号. 支持7位8位车牌号,因为我的项目没有此需求,所以没有测试,具 ...

最新文章

  1. js手机键盘遮挡_完美解决手机网页中输入框被输入法遮挡的问题
  2. 阿里发布AliGenie2.0系统,“百箱大战”用上视觉武器
  3. 使用MATLAB如何生成jar包
  4. zabbix 进阶(二)
  5. CodeForces - 743B Chloe and the sequence
  6. JQuery的摸索之路(二比较)
  7. 信息安全系统设计基础_exp1
  8. 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)
  9. linux setsockopt函数
  10. edittext 无法输入内容_掌握其中1个Excel小技巧,你就不用再担心会重复录入内容了。...
  11. 计算机如何驱动无线网络,win7焦头烂额的无线网卡驱动程序安装问题!求帮助!...
  12. SyncBird Pro的PhoneCare功能如何使用
  13. go语言中错误处理方式
  14. servlet的请求转发与重定向
  15. 前端es6文档大全,你想要的这都有
  16. TMB计算是否要去除驱动突变
  17. 你知道h5游戏是什么吗,怎么制作一款h5案例?
  18. 范数不等式 琴生兄弟不等式 补全百度
  19. bat文件的@echo off是什么作用?
  20. python计算复数的辐角_Python 自定义类中的函数和运算符重载

热门文章

  1. 逆转录转座子简单介绍
  2. android 百度地图大头针,百度地图API 地理位置获取和大头针显示当前位置
  3. 操作系统锁的实现方法有哪几种_深入理解多线程(四)——Moniter的实现原理...
  4. aliyun资源编排 介绍和实例
  5. Volatility3内存取证工具使用详解
  6. clustalw序列比对_COBALT:NCBI在线蛋白多序列比对(比ClustalW还强大的工具)
  7. 录屏 java_Java小程序—录屏小程序(上半场)
  8. Unity基础学习——光照系统
  9. Java工程师待遇怎么样?
  10. 【Excle数据透视表】如何移动数据透视表的位置