shophi
骑士
骑士
  • UID781
  • 粉丝2
  • 关注0
  • 发帖数42
阅读:2182回复:1

微信企业付款,自动结算商户货款,技术咨询【有代码】

楼主#
更多 发布于:2018-04-19 12:29
主要探讨:这种逻辑设计,会不会有什么隐患,毕竟牵扯资金的都不是小事。
外部接口是 类名::bill_mchpay()来调用!
主要是bill_update 静态方法,这样逻辑严谨不严谨?面对客户重复提交、极端情况或者高并发下,代码安全吗?
/**
* @brief 自动结算外部接口
* @return array 无返回值
*/
public static function bill_mchpay()
{
$billDB = new IModel('bill');
$billRow = $billDB->query('is_pay = 0 and is_mchpay = 0'); //条件:is_pay未结算,微信is_mchpay未结算
if(!$billRow){
return false; //为空,返回
}else{
foreach ( $billRow as $k => $v){ //循环处理
$hold = 0; //结算锁
if(isset($v['order_ids']) && $v['order_ids']) //order表主键ID,结算的订单ID
{
//更新订单商品关系表中的结算字段
$orderDB = new IModel('order');
$orderIdArray = explode(',',$v['order_ids']);
foreach($orderIdArray as $key => $val)
{
$data = [];
$data = $orderDB->getObj('id = '.$val);
if($data['is_mchpay']){
$hold = 1; //结算锁 有订单已结算
break; //$data['is_mchpay']=1 已结算,终止循环
}
}
if($hold == 0){
$sellerDB = self::getSeller($v['seller_id']);
if($sellerDB['openid']){ //商户微信openid
self::bill_update($v['id'],$sellerDB); //传入结算单ID
}
}
}
}
}
}
//获取seller商户表数据
private static function getSeller($seller_id = ''){
$seller_id = IFilter::act( $seller_id,'int' ); //商户ID
$sellerObj = new IModel('seller');
$sellerRow = $sellerObj->getObj('id = '.$seller_id);
if(!$sellerRow){
return false;
}
return $sellerRow;
}
//微信转账-修改结算单为:已结算
private static function bill_update($id = 0,$sellerDB = null)
{
$id = IFilter::act($id,'int'); //结算单ID
$is_pay = 1; //结算标志位:0未结算,1已结算
$billDB = new IModel('bill');
$billRow= $billDB->getObj('id = '.$id);
//微信转账TODO //商户微信openid
$res = self::pay($sellerDB['openid'],$id,$billRow['amount'],$sellerDB['true_name'].'微信提现');
//微信企业付款,结果分析
if(isset($res['return_code']) && isset($res['result_code']) && $res['return_code']== 'SUCCESS' && $res['result_code']== 'SUCCESS'){ //微信转账,付款成功
if(isset($billRow['order_ids']) && $billRow['order_ids']) //order表主键ID,结算的订单ID
{
//更新订单商品关系表中的结算字段
$orderDB = new IModel('order');
$orderIdArray = explode(',',$billRow['order_ids']);
foreach($orderIdArray as $key => $val)
{
$orderDB->setData(array('is_checkout' => $is_pay,'is_mchpay' => $is_pay)); //是否给商家结算货款 0:未结算 1:已结算
$orderDB->update('id = '.$val);
}
}
$pay_content = "微信自动结算:".$res['payment_time'].';返回:'.JSON::encode($res); //管理员回复
$data = array(
'admin_id' => 1, //管理员ID 默认值 1
'pay_content' => $pay_content, //管理员回复
'is_pay' => $is_pay, //结算标志位
'is_mchpay' => $is_pay, //微信结算标志位
'pay_time' => ITime::getDateTime(), //支付结算时间
);
$billDB->setData($data);
$billDB->update('id = '.$id);
}else{ //微信企业付款,失败
$pay_content = '失败返回:'.JSON::encode($res); //管理员回复
$data = array(
'pay_content' => date('Ymd H:i:s').$pay_content, //管理员回复
//'pay_time' => ITime::getDateTime(), //支付结算时间
//'is_pay' => 0, //结算标志位
//'is_mchpay' => 0, //微信结算标志位
);
$billDB->setData($data);
$billDB->update('id = '.$id);
}
}
shophi
骑士
骑士
  • UID781
  • 粉丝2
  • 关注0
  • 发帖数42
沙发#
发布于:2018-04-19 12:33

图片:QQ截图20180419123207.png

图片:QQ截图20180419123306.png

图片:QQ截图20180419123321.png

游客

返回顶部