微学网

热门关键词:   as  thinkphp  ecshop  xxx  商务通  www.ymwears.cn
热门: ASP.NET PHP编程 ASP编程 JSP编程 Python

微信支付对账如何处理?

发布时间:2021-04-20 来源:未知 点击:

做支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致,具体字段说明可查阅相应接口。

Ps:至于如何调用微信接口下载对账单,在微信的官方SDK包中就有现成的方法,直接调用即可。注意对账单接口一次只能查询一天的数据。

 

代码大致如下:

// 引入微信sdk文件 
require_once APP_DIR . '/ome/lib/wxpay/lib/WxPay.Api.php'; 
require_once APP_DIR . '/ome/lib/wxpay/log.php'; 
// 实列化下载对账单对象 
$input = new WxPayDownloadBill(); 
// 对账单日期 
$input->SetBill_date(date("Ymd", strtotime("-1 day"))); 
// 对账单类型 
$input->SetBill_type('ALL'); 
// 获取账单信息 
$downloadBillResult = WxPayApi::downloadBill($input); 

打印$downloadBillResult就会发现他是一个数据文本(string),本文程序需要实现的功能就是从这个字符串从提取每一笔订单中的有效信息,参考代码如下:

/**
 * 微信对账单数据处理
 * @param $response 对账单数据
 * @return array 返回结果
 */ public function deal_WeChat_response($response){
  $result  = array();
  $response = str_replace(","," ",$response);
  $response = explode(PHP_EOL, $response);

  foreach ($response as $key=>$val){
    if(strpos($val, '`') !== false){
      $data = explode('`', $val);
      array_shift($data); // 删除第一个元素并下标从0开始       if(count($data) == 24){ // 处理账单数据         $result['bill'][] = array(
          'pay_time'       => $data[0], // 支付时间           'APP_ID'        => $data[1], // app_id           'MCH_ID'        => $data[2], // 商户id           'IMEI'         => $data[4], // 设备号           'order_sn_wx'     => $data[5], // 微信订单号           'order_sn_sh'     => $data[6], // 商户订单号           'user_tag'       => $data[7], // 用户标识           'pay_type'       => $data[8], // 交易类型           'pay_status'      => $data[9], // 交易状态           'bank'         => $data[10], // 付款银行           'money_type'      => $data[11], // 货币种类           'total_amount'     => $data[12], // 总金额           'coupon_amount'    => $data[13], // 代金券或立减优惠金额           'refund_number_wx'   => $data[14], // 微信退款单号           'refund_number_sh'   => $data[15], // 商户退款单号           'refund_amount'    => $data[16], // 退款金额           'coupon_refund_amount' => $data[17], // 代金券或立减优惠退款金额           'refund_type'     => $data[18], // 退款类型           'refund_status'    => $data[19], // 退款状态           'goods_name'      => $data[20], // 商品名称           'service_charge'    => $data[22], // 手续费           'rate'         => $data[23], // 费率         );
      }
      if(count($data) == 5){ // 统计数据         $result['summary'] = array(
          'order_num'    => $data[0],  // 总交易单数           'turnover'    => $data[1],  // 总交易额           'refund_turnover' => $data[2],  // 总退款金额           'coupon_turnover' => $data[3],  // 总代金券或立减优惠退款金额           'rate_turnover'  => $data[4],  // 手续费总金额         );
      }
    }
  }
  return $result;
} 

 

返回的数据分为2部分,bill节点下存放的是具体流水数据,summary节点下存放的是统计数据

主要的思路是微信账单返回的结果格式是固定的,可以用 '`',换行符(PHP_EOL)实现字符串的分割,然后每 24 个 字段为一个订单的描述信息,最后 6 个字段为账单的汇总信息。因此通过循环就可以遍历整个账单。


这就是微学网-程序员之家为你提供的"微信支付对账如何处理?"希望对你有所帮助.本文来自网络,转载请注明出处:http://www.weixuecn.cn/article/14242.html
网络编程 | 前端制作 | 数据库 | CMS教程 | 脚本编程 | 框架 | 服务器 | 微信开发 | APP开发 | 学习教程 |

凡本网站转载的文章、图片等资料的版权归版权所有人所有,因无法和版权所有者一一联系,如果本网站选取的文/图威胁到您的权益,请您及时和本网站联系。 我们会在第一时间内采取措施,避免给双方造 成不必要的损失。
© 2015-2021 微学网 版权所有,并保留所有权利。 备案号:粤ICP备09051474号-1

菜鸟学习网,提供各类程序编程入门,技巧