<?php
namespace app\controller;
use app\controller\Acl;
use app\model\Deploy;
class Wechat extends Acl {
public function pay() {
$input=input('post.');
if(existFull($input,['number','money','code'])){
$deploy=getFrameDeploy();
if(!empty($deploy)){
$wxPayPath=root_path('extend/wechat');
require_once $wxPayPath."WxPay.Api.php";
require_once $wxPayPath."WxPay.Config.php";
$config=new \WxPayConfig;
$config->appId=$deploy['wechat']['appid'];
$config->merchantId=$deploy['wechat']['mchid'];
$config->key=$deploy['wechat']['mchkey'];
$order=new \WxPayMicroPay;
$order->SetBody($deploy['wechat']['title']);
$order->SetOut_trade_no($input['number']);
$money=math()->chain($input['money'])->mul(100)->done();
$order->SetTotal_fee($money);
$order->SetAuth_code($input['code']);
$result=\WxPayApi::micropay($config,$order);
if($result['return_code']=='SUCCESS'){
if($result['result_code']=='SUCCESS'){
$result=['state'=>'success','info'=>$result['transaction_id']];
}else{
if(in_array($result['err_code'],['SYSTEMERROR','BANKERROR','USERPAYING'])){
$result=['state'=>'wait','info'=>'等待操作...'];
}else{
$result=['state'=>'wrong','info'=>$result['err_code_des']];
}
}
}else{
$result=['state'=>'wrong','info'=>$result['return_msg']];
}
}else{
$result=['state'=>'error','info'=>'支付参数不完整!'];
}
}else{
$result=['state'=>'error','info'=>'传入参数不完整!'];
}
return json($result);
}
public function query(){
$input=input('post.');
if(existFull($input,['number'])){
$deploy=getFrameDeploy();
if(!empty($deploy)){
$wxPayPath=root_path('extend/wechat');
require_once $wxPayPath."WxPay.Api.php";
require_once $wxPayPath."WxPay.Config.php";
$config=new \WxPayConfig;
$config->appId=$deploy['wechat']['appid'];
$config->merchantId=$deploy['wechat']['mchid'];
$config->key=$deploy['wechat']['mchkey'];
$order=new \WxPayOrderQuery;
$order->SetOut_trade_no($input['number']);
$result=\WxPayApi::orderQuery($config,$order);
if($result['return_code']=='SUCCESS'){
if($result['result_code']=='SUCCESS'){
if($result['trade_state']=='SUCCESS'){
$result=['state'=>'success','info'=>$result['transaction_id']];
}elseif($result['trade_state']=='USERPAYING'){
$result=['state'=>'wait','info'=>'等待操作...'];
}else{
$result=['state'=>'wrong','info'=>$result['trade_state_desc']];
}
}else{
if($result['err_code']=='SYSTEMERROR'){
$result=['state'=>'wait','info'=>'等待操作...'];
}else{
$result=['state'=>'wrong','info'=>$result['err_code_des']];
}
}
}else{
$result=['state'=>'wrong','info'=>$result['return_msg']];
}
}else{
$result=['state'=>'error','info'=>'支付参数不完整!'];
}
}else{
$result=['state'=>'error','info'=>'传入参数不完整!'];
}
return json($result);
}
public function cancel(){
$input=input('post.');
if(existFull($input,['number'])){
$deploy=getFrameDeploy();
if(!empty($deploy)){
$wxPayPath=root_path('extend/wechat');
require_once $wxPayPath."WxPay.Api.php";
require_once $wxPayPath."WxPay.Config.php";
$sslCert = tmpfile();
fwrite($sslCert,$deploy['wechat']['certText']);
$sslKey = tmpfile();
fwrite($sslKey,$deploy['wechat']['keyText']);
$config=new \WxPayConfig;
$config->appId=$deploy['wechat']['appid'];
$config->merchantId=$deploy['wechat']['mchid'];
$config->key=$deploy['wechat']['mchkey'];
$config->sslCertPath=stream_get_meta_data($sslCert)['uri'];
$config->sslKeyPath=stream_get_meta_data($sslKey)['uri'];
$order=new \WxPayReverse;
$order->SetOut_trade_no($input['number']);
$result=\WxPayApi::reverse($config,$order);
if($result['return_code']=='SUCCESS'){
if($result['result_code']=='SUCCESS'){
$result=['state'=>'success','info'=>'撤销单据成功!'];
}else{
if(in_array($result['err_code'],['SYSTEMERROR','USERPAYING'])){
$result=['state'=>'wait','info'=>'等待操作...'];
}else{
$result=['state'=>'wrong','info'=>$result['err_code_des']];
}
}
}else{
$result=['state'=>'wrong','info'=>$result['return_msg']];
}
}else{
$result=['state'=>'error','info'=>'支付参数不完整!'];
}
}else{
$result=['state'=>'error','info'=>'传入参数不完整!'];
}
return json($result);
}
}