PHP实现财务审核通过后返现金额到客户的功能


Posted in PHP onJuly 04, 2019

应用场景:

有这么一个返现的系统,当前端客户发起提现的时候,后端就要通过审核这笔返现订单,才可以返现到客户的账号里。

来看看下面的截图

PHP实现财务审核通过后返现金额到客户的功能

这里的业务场景就是经过两轮审核:销售审核,财务审核都通过后,后端就会付款一笔钱到客户,当然,这里财务审核会有很多种情况,不通过与通过,通过后直接付款又有很多种情况,详细可以查看微信付款到零钱的文档。下面就来看看具体你的代码实现

微信支付配置

1,数据表大概如下

CREATE TABLE `zmq_weixin_config` (
 `id` int(1) unsigned NOT NULL AUTO_INCREMENT COMMENT '微信公众平台编号,自增id',
 `weixin_name` varchar(10) NOT NULL COMMENT '微信公众平台名称',
 `token` varchar(100) NOT NULL,
 `appid` char(18) NOT NULL,
 `appsecret` char(32) NOT NULL,
 `access_token` varchar(300) NOT NULL,
 `api_ticket` varchar(300) DEFAULT NULL COMMENT '微信卡包api_ticket',
 `api_ticket_expired_at` datetime DEFAULT NULL COMMENT '微信卡包api_ticket过期时间',
 `mchid` varchar(20) DEFAULT NULL COMMENT '商户号',
 `mchkey` varchar(50) DEFAULT NULL COMMENT '支付密钥',
 `expired_at` timestamp NULL DEFAULT NULL COMMENT 'access_token过期时间,会自动更新',
 `updated_at` timestamp NULL DEFAULT NULL COMMENT '记录更新时间',
 `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
 `sort_order` smallint(5) NOT NULL DEFAULT '0' COMMENT '排序',
 `points_url` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='微信配置表';

2 .config的配置方法

/**
 * 获取微信支付配置
 * 这里我是把配置信息存储在数据表里,方便调用
 * $param是从controller里传值过来:weixin_config_id,notify_url
 * @return array
 */
public function getWechatConfig($param)
{
  $weixin = WeixinConfigBaseModel::find($param['weixin_config_id']);
  if (empty($weixin)) {
    throw new Exception('微信配置ID错误');
  }

  return [
    'wechat' =>[
      $app_id => $weixin->appid,
      'mch_id' => $weixin->mchid,
      'notify_url' => empty($param['notify_url']) ? '' : $param['notify_url'], //回调url
      'key' => $weixin->mchkey,
      'cert_client' => resource_path().'/wechat/'.$weixin->id.'/apiclient_cert.pem', //证书与key
      'cert_key' => resource_path().'/wechat/'.$weixin->id.'/apiclient_key.pem',
    ]
  ];
}

企业付款到个人零钱核心代码

/**
 * 获取微信支付配置
 * 这里我是把配置信息存储在数据表里,方便调用
 * $param是从controller里传值过来:weixin_config_id,notify_url
 * @return array
 */
public function getWechatConfig($param)
{
  $weixin = WeixinConfigBaseModel::find($param['weixin_config_id']);
  if (empty($weixin)) {
    throw new Exception('微信配置ID错误');
  }

  return [
    'wechat' =>[
      $app_id => $weixin->appid,
      'mch_id' => $weixin->mchid,
      'notify_url' => empty($param['notify_url']) ? '' : $param['notify_url'], //回调url
      'key' => $weixin->mchkey,
      'cert_client' => resource_path().'/wechat/'.$weixin->id.'/apiclient_cert.pem', //证书与key
      'cert_key' => resource_path().'/wechat/'.$weixin->id.'/apiclient_key.pem',
    ]
  ];
}

财务审核,也就是微信返现到零钱,这个时候会返回成功结果,或者是各种不成功的结果

这里我用一个方法封装

//财务审核
if($param['status'] == 2){

  //判断返现金额与修改后的金额
  if($before_rebate_amount != $param['rebate_amount']){
    //返现金额不相等,则出款金额改变
    $out_amount = $param['rebate_amount'] - $before_rebate_amount ;
    $this->outMount($business->business_id,$out_amount);
  }

  if($param['rebate_status'] == 9){
    //财务拒绝通过
    $business->audit_status = $param['rebate_status'];
    $business->rebate_amount = $param['rebate_amount'];
    $business->status = 6;
    $business->save();

    //生成日志
    $this->insertWithdrawLog($param['withdraw_id'], $business->status, $business->audit_status, $param['rebate_remark'], $param['admin_id']);

  }else{
    //提现的各种返回结果
    $this->payReturnResult($business,$param);
  }
}
/**
 * Function:微信提现返回的各种结果
 * Author:cyw0413
 * @param $res
 * @param $business
 * @param $param
 */
public function payReturnResult($business,$param)
{
  $input = [
    'weixin_config_id' => 20 ,
    'openid'      => $business->business->open_id,
    'amount'      => $param['rebate_amount'] * 100,
    'trade_no'     => $business->order_sn, //商户订单号
    'desc'       => "微信提现"
  ];

  $pay = new PayLogBaseService();
  $res = $pay->weixinPay($input);

  if($res['result_code']=="SUCCESS"){
    //提现成功
    $business->audit_status = 4;
    $business->status = 4;
    $business->rebate_amount = $param['rebate_amount'];
    $param['rebate_remark'] = "已付款(".$param['rebate_amount'].")";

  }elseif ($res['err_code'] == "MONEY_LIMIT"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,已达到付款给此用户额度上限";
    //throw new \Exception($param['rebate_remark']);

  }elseif ($res['err_code'] == "AMOUNT_LIMIT"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,低于最低付款金额或者高于最高付款金额";
    //throw new \Exception($param['rebate_remark']);
egdf
  }elseif ($res['err_code'] == "NOTENOUGH"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,付款帐号余额不足或资金未到账";
    //throw new \Exception($param['rebate_remark']);

  }elseif ($res['err_code'] == "SIGN_ERROR"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,签名错误";

  }elseif ($res['err_code'] == "PARAM_ERROR"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,参数错误";

  }elseif ($res['err_code'] == "OPENID_ERROR"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,Openid错误";

  }elseif ($res['err_code'] == "FATAL_ERROR"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,两次请求参数不一致";

  }elseif ($res['err_code'] == "CA_ERROR"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,商户API证书校验出错";

  }elseif ($res['err_code'] == "V2_ACCOUNT_SIMPLE_BAN"){
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,无法给非实名用户付款";

  }else{
    $business->audit_status = 3;
    $business->status = 3;
    $param['rebate_remark'] = "提现失败,服务器繁忙,请稍后再试";
    //throw new \Exception($param['rebate_remark']);
  }

  $business->save();

}

当微信平台余额不足或者出现各种错误而提现失败的时候,这里还有支持重新付款的功能:其实就是点击按钮后重新调用付款到零钱的功能,知道成功付款

/**
 * Function:重新付款
 * Author:cyw0413
 * @param $param
 * @throws \Exception
 */
public function repay($param)
{
  if(empty($param)){
    throw new \Exception("参数错误");
  }
  $business = GroupBusinessWithdrawBaseModel::find($param['withdraw_id']);
  if(empty($business)){
    throw new \Exception("不存在!");
  }
  if($business->audit_status != 3){
    throw new \Exception("状态有错误");
  }
  //提现的各种返回结果
  $this->payReturnResult($business,$param);
}

总结

以上所述是小编给大家介绍的PHP实现财务审核通过后返现金额到客户的功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
PHP 定界符 使用技巧
Jun 14 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
递归实现php数组转xml的代码分享
May 14 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
PHP 断点续传实例详解
Nov 11 PHP
详解php中curl返回false的解决办法
Mar 18 PHP
Laravel 实现数据软删除功能
Aug 21 PHP
php 中的信号处理操作实例详解
Mar 04 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 #PHP
PHP创建XML接口示例
Jul 04 #PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 #PHP
PHP实现关键字搜索后描红功能示例
Jul 03 #PHP
Smarty模板类内部原理实例分析
Jul 03 #PHP
Referer原理与图片防盗链实现方法详解
Jul 03 #PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 #PHP
You might like
PHPMyAdmin 快速配置方法
2009/05/11 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
鼠标图片振动代码
2006/07/06 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python读取和保存视频文件
2018/04/16 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
详解Python sys.argv使用方法
2019/05/10 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
《路旁的橡树》教学反思
2014/04/07 职场文书
租房协议书范文
2014/08/20 职场文书
软环境建设心得体会
2014/09/09 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
标准单位租车协议书
2014/09/23 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
交通事故调解协议书
2015/05/20 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android