canyin-project/ybcy/controllers/channel/CashierNotifyController.php
2024-11-01 16:07:54 +08:00

256 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\controllers\channel;
use Illuminate\Support\Facades\DB;
use Yii;
use yii\web\Controller;
use app\models\common\WeChat;
use EasyWeChat\Factory;
use app\models\common\Bill;
use Yansongda\Pay\Pay;
//require('vendor/alipay/f2fpay/model/builder/AlipayTradePayContentBuilder.php');
class CashierNotifyController extends Controller{
public function actionPay(){
$result=axios_request();
//$storeId=$result['storeId']?:1;
$storeId='1';
$outTradeNo=$result['outTradeNo'];
$origin=1;
$uniacid = $this->wqData['uniacid'];
$auth_code=trim($result['auth_code']);
$this->payment($uniacid,$outTradeNo,$auth_code);
die;
if($auth_code){
$app=WeChat::cashierConfig($uniacid,$storeId,$origin);
$result = $app->order->unify([
'body' => '腾讯充值中心-QQ会员充值',
'out_trade_no' =>$outTradeNo,
'total_fee' => 1,
//'notify_url' => 'https://v2.bkycms.com/channel/cashier-notify/notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
//'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'auth_code'=>$auth_code
]);
if(!array_key_exists("return_code", $result) || !array_key_exists("result_code", $result)) {
echo json_encode(['code'=>1,'msg'=>'接口调用失败']);die;
}
//③、确认支付是否成功
$queryTimes = 10;
while($queryTimes > 0) {
$succResult = 0;
//③、确认支付是否成功
$queryResult = $this->queryOrder($uniacid,$storeId,$outTradeNo);
//如果需要等待1s后继续
if($queryResult['succCode'] == 2){
sleep(2);
continue;
} else if($queryResult['succCode'] == 1){//查询成功
$this->notify($outTradeNo);
} else {//订单交易失败
break;
}
}
echo json_encode(['code'=>1,'msg'=>'订单取消']);die;
}else{
echo json_encode(['code'=>1,'msg'=>'缺少付款码']);die;
}
}
/**
*
* 查询订单情况
* @param string $out_trade_no 商户订单号
* @param int $succCode 查询订单结果
* @return 0 订单不成功1表示订单成功2表示继续等待
*/
public function queryOrder($uniacid,$storeId,$outTradeNo){
try{
$origin=1;
$app=WeChat::cashierConfig($uniacid,$storeId,$origin);
$result=$app->order->queryByOutTradeNumber($outTradeNo);
} catch(Exception $e) {
}
if($result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS") {
//支付成功
if($result["trade_state"] == "SUCCESS"){
$result['succCode']=1;
return $result;
}
//用户支付中
else if($result["trade_state"] == "USERPAYING"){
$result['succCode']=2;
return false;
}
}
//如果返回错误码为“此交易订单号不存在”则直接认定失败
if($result["err_code"] == "ORDERNOTEXIST")
{
$succCode = 0;
} else{
//如果是系统错误,则后续继续
$succCode = 2;
}
return false;
}
public function notify($outTradeNo){
$order = (new \yii\db\Query())
->from('{{%ybwm_instore_order}}')
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $outTradeNo])->one();
$res=Yii::$app->db->createCommand()->update('{{%ybwm_instore_order}}', ['state'=>2],'outTradeNo=:outTradeNo', [':outTradeNo' => $outTradeNo])->execute();
$transaction = Yii::$app->db->beginTransaction(); //开始事务
if($res) {
$bill = Bill::bill($order['uniacid'], 1, 1, $order['outTradeNo'], 1);
if (!$bill) {
$transaction->rollBack();//事务回滚
return false;
}
}
echo json_encode(['code'=>1,'msg'=>'支付成功']);die;
}
//-----------------------------支付宝条形码支付--------------------------------------------------
//支付宝条码支付直接调用ali_tiaoma_pay方法把条码和金额传进去就ok
function actionAlipay(){
$config =array(
'app_id' => '2019091867562464',
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjEKdm/ZchS/TmkEim2qrTfSFv4kq44KILM+7NaqsJTzrfZwWAWLeEqCHCM9n2lB/3cU0ImLPpHlzFLoy0hKgk+ZtbXhgfTLHtSErQL+WLqsNMe7mcrUYGO/9/51Z8X/b5UJgUzlVWoxnlROCfoGTQCmSmof5RtInWyXWk0CCj3u9jyzXsLhaonB3o1Y5rJEXyrQwCTyAgZlw9UesaKtq+l6J3ry2tHJSKt6tfH4nLA2F8CTteSOjmVd6y5RebqRhud6hBlVxoSV7FS7wTLVR3su8rgH6AAydB12IRd+TnGYYk5trNsqF2CLCk8sKcktL7OkUFiAHFooqcLqJpqTYCwIDAQAB',
'private_key' => 'MIIEpgIBAAKCAQEA6l/HNl169TQ+cwm80tHgoHF+FJtC5b26/Xw7dwy8UJiBB1p1WO1p9Si01WdSQbBwZcxUY+A347LE2R9FH70kc6d5Fan7vZTUAT+a6xF7+TwZshyTlNM2zB2/a07wXZqkrjuwIQ5AnqqbGhbyq6tqD4+H2J59SHgK21ZJpmbGoqDfOGJC79n8sGD2X9BGU9JS5STwqQN6lqY0/FhyQZmcv6EYFapXXIUzzDZ/bZeGvRa9JAqTylI+Kd96aAYZtrkZCkuysjgdvwTA02w4nA0xDKMen4iu3GsDo+pSQFfYSdsxTdnuYcEfs6AV7Y/tc6fLrb4mTELJK8AS3wd/WAKKZwIDAQABAoIBAQC1gODkwDYVqJToP9VEKpbbiajLSoXfJzSlU801X96CR+g8ipgv+wRAgHqyfWZdSsdwfnGoOx7tLid1wdqlPrP5AOwrk81JvvUD1n8hphOtKxb3MVw1N/DK2ArCjopk4vq/l6fJoaD3f0XISZc6zO/BBzV70xlQwu4deFBnFlaj35g2/zK5GRCbs6Sjka3WqEC9Dd16jJXfV4Zal2Mmv1eyaYGnyBAc3gdftA3RRqffJ5RsisgiY2KKaNg20kPW7um3U2pcYAxSYZhJVEsd4r0paKPG9jtkSrR+zEzyR1pHZDmD3DAS5sggpiPdLiMYyYEBOKzCLumCvqdPFiX+XGJpAoGBAPcYAkfX0i893dGfHbbMSeoxGTJkI7y0YqmhFaJVgYBD4HkkWUHUbfqcAmJW5lw2Ain/jRnRBhEyuLeAaTpPTpNtRtyCagfdD4ULpLE2R89tPttcDgZ5uLq3Tdg88IKbdA9A0I6RnUomglJbbwSFrl+5PxUb+0iFlfaQUj8cmDU7AoGBAPLSZvFpscsISy7s7AkQVOrfiufgDa+MjwEzIcZp3qrjTOkLCvE4Ta12/ABKYtD8o7OR7fhfGUbRMW5vFpEauQdyFqN+xwZ9unJq83mv28qwbSY/TC4it6XSoq6cDgwhYloLWnj+D8Yejf8IiY1Ui/t23wZmbb96tZPywgmBu3zFAoGBAOBNZySYgjBoVMhJTMv3vtFdKKZZyScwCLA7jkwCmsA43biainv7vqpUnMVwZUUnsec2GHxrBrrt9Eh/xQYtoAKsnDroGCBzR/dajnJf9+gQH5M5iXHPZSX56Cx3hUzKmRyPlcMV5Fa/hmYEok7Um2pB20XqVL2MpolgkYjBCFqpAoGBAJLjnqx5ULlOihSX8+1DuOrgUaoVSpIgiD2kjdD2KGHd4J+1M2has/q0WJtgZEiiG/E73OX7uVGyqKFyiAc9UCLl7DX5MjKGCiy+8AxzypThhxW1AsOB8vBX7FuOQZ0q8NEhvxgkMKybvTBDHNqnA4saDK5Vdhx4AbG/D4wqs501AoGBAPKLLch4WckE9m+awheuuTp50ON8ghjwMvJg3u9DgDQber/8C9ig1nN1SQp9vXYSWW9sc70YvGpwBbD+V+XZD3yTbEiyt5ESVsFMhE19C2oBg9Dy64lJ8B4i1uJ9EhTeP3A8XjP2f0r8ClQwQoh0OL6rx7734ToZnUnnWOhxZ9Eh',
);
$order = [
'out_trade_no' => time(),
'total_amount' => '0.01',
'subject' => 'test subject-刷卡支付',
'auth_code' => '286636537649543523',
];
try {
$alipay = Pay::alipay($config)->pos($order);
}catch (\Exception $e){
//echo $e->getMessage();
// die(); // 终止异常
}
switch ($alipay->code) {
case "10000":
echo json_encode(['code'=>1,'msg'=>'支付成功']);die;
break;
case "10003":
echo json_encode(['code'=>2,'msg'=>'等待用户付款']);die;
break;
case "40004":
echo json_encode(['code'=>2,'msg'=>'支付失败']);die;
break;
default:
echo json_encode(['code'=>2,'msg'=>'不支持的交易状态,交易返回异常!!!']);die;
break;
}
}
public function actionCeshi(){
$config = [
'app_id' => 'wx2f926923ad50c5e5', // 小程序 APPID
'mch_id' => '1556224401',
'key' => 'ybkj888ybkj888ybkj888ybkj888ybkj',
];
$out_trade_no=2021030200009;
$order = [
'out_trade_no' =>$out_trade_no,
'total_fee' => 1,
'body' => 'test subject-微信刷卡支付',
'auth_code' => '134553238456978129',
];
try {
$wechat = Pay::wechat($config)->pos($order);
dd($wechat);die;
}catch (\Exception $e){
//echo $e->getMessage();
// die(); // 终止异常
}
//$result=Pay::wechat($config)->find($out_trade_no);
try {
$alipay = Pay::alipay($config)->pos($order);
dd($alipay);
}catch (\Exception $e){
//echo $e->getMessage();
// die(); // 终止异常
}
}
public function payment($uniacid,$outTradeNo,$auth_code){
$order=$order = (new \yii\db\Query())
->from('{{%ybwm_instore_order}}')
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $outTradeNo])->one();
$money=0.01;
if(substr($auth_code , 0 , 2)=='28'){
$payType=2;
//$config=WeChat::payConfig($uniacid,$payType);
$config =array(
'app_id' => '2019091867562464',
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjEKdm/ZchS/TmkEim2qrTfSFv4kq44KILM+7NaqsJTzrfZwWAWLeEqCHCM9n2lB/3cU0ImLPpHlzFLoy0hKgk+ZtbXhgfTLHtSErQL+WLqsNMe7mcrUYGO/9/51Z8X/b5UJgUzlVWoxnlROCfoGTQCmSmof5RtInWyXWk0CCj3u9jyzXsLhaonB3o1Y5rJEXyrQwCTyAgZlw9UesaKtq+l6J3ry2tHJSKt6tfH4nLA2F8CTteSOjmVd6y5RebqRhud6hBlVxoSV7FS7wTLVR3su8rgH6AAydB12IRd+TnGYYk5trNsqF2CLCk8sKcktL7OkUFiAHFooqcLqJpqTYCwIDAQAB',
'private_key' => 'MIIEpgIBAAKCAQEA6l/HNl169TQ+cwm80tHgoHF+FJtC5b26/Xw7dwy8UJiBB1p1WO1p9Si01WdSQbBwZcxUY+A347LE2R9FH70kc6d5Fan7vZTUAT+a6xF7+TwZshyTlNM2zB2/a07wXZqkrjuwIQ5AnqqbGhbyq6tqD4+H2J59SHgK21ZJpmbGoqDfOGJC79n8sGD2X9BGU9JS5STwqQN6lqY0/FhyQZmcv6EYFapXXIUzzDZ/bZeGvRa9JAqTylI+Kd96aAYZtrkZCkuysjgdvwTA02w4nA0xDKMen4iu3GsDo+pSQFfYSdsxTdnuYcEfs6AV7Y/tc6fLrb4mTELJK8AS3wd/WAKKZwIDAQABAoIBAQC1gODkwDYVqJToP9VEKpbbiajLSoXfJzSlU801X96CR+g8ipgv+wRAgHqyfWZdSsdwfnGoOx7tLid1wdqlPrP5AOwrk81JvvUD1n8hphOtKxb3MVw1N/DK2ArCjopk4vq/l6fJoaD3f0XISZc6zO/BBzV70xlQwu4deFBnFlaj35g2/zK5GRCbs6Sjka3WqEC9Dd16jJXfV4Zal2Mmv1eyaYGnyBAc3gdftA3RRqffJ5RsisgiY2KKaNg20kPW7um3U2pcYAxSYZhJVEsd4r0paKPG9jtkSrR+zEzyR1pHZDmD3DAS5sggpiPdLiMYyYEBOKzCLumCvqdPFiX+XGJpAoGBAPcYAkfX0i893dGfHbbMSeoxGTJkI7y0YqmhFaJVgYBD4HkkWUHUbfqcAmJW5lw2Ain/jRnRBhEyuLeAaTpPTpNtRtyCagfdD4ULpLE2R89tPttcDgZ5uLq3Tdg88IKbdA9A0I6RnUomglJbbwSFrl+5PxUb+0iFlfaQUj8cmDU7AoGBAPLSZvFpscsISy7s7AkQVOrfiufgDa+MjwEzIcZp3qrjTOkLCvE4Ta12/ABKYtD8o7OR7fhfGUbRMW5vFpEauQdyFqN+xwZ9unJq83mv28qwbSY/TC4it6XSoq6cDgwhYloLWnj+D8Yejf8IiY1Ui/t23wZmbb96tZPywgmBu3zFAoGBAOBNZySYgjBoVMhJTMv3vtFdKKZZyScwCLA7jkwCmsA43biainv7vqpUnMVwZUUnsec2GHxrBrrt9Eh/xQYtoAKsnDroGCBzR/dajnJf9+gQH5M5iXHPZSX56Cx3hUzKmRyPlcMV5Fa/hmYEok7Um2pB20XqVL2MpolgkYjBCFqpAoGBAJLjnqx5ULlOihSX8+1DuOrgUaoVSpIgiD2kjdD2KGHd4J+1M2has/q0WJtgZEiiG/E73OX7uVGyqKFyiAc9UCLl7DX5MjKGCiy+8AxzypThhxW1AsOB8vBX7FuOQZ0q8NEhvxgkMKybvTBDHNqnA4saDK5Vdhx4AbG/D4wqs501AoGBAPKLLch4WckE9m+awheuuTp50ON8ghjwMvJg3u9DgDQber/8C9ig1nN1SQp9vXYSWW9sc70YvGpwBbD+V+XZD3yTbEiyt5ESVsFMhE19C2oBg9Dy64lJ8B4i1uJ9EhTeP3A8XjP2f0r8ClQwQoh0OL6rx7734ToZnUnnWOhxZ9Eh',
);
$order = [
'out_trade_no' =>$outTradeNo,
'total_fee' =>$money,
'body' => '收银台-支付宝当面付',
'auth_code' =>$auth_code,
];
try {
$alipay = Pay::alipay($config)->pos($order);
}catch (\Exception $e){
//echo $e->getMessage();
// die(); // 终止异常
}
switch ($alipay->code) {
case "10000":
echo json_encode(['code'=>1,'msg'=>'支付成功']);die;
break;
case "10003":
echo json_encode(['code'=>2,'msg'=>'等待用户付款']);die;
break;
case "40004":
echo json_encode(['code'=>2,'msg'=>'支付失败']);die;
break;
default:
echo json_encode(['code'=>2,'msg'=>'不支持的交易状态,交易返回异常!!!']);die;
break;
}
}else{
$payType=1;
$money=bcmul($money,100);
$config=WeChat::payConfig($uniacid,$payType);
$order = [
'out_trade_no' =>$outTradeNo,
'total_fee' =>$money,
'body' => '收银台-支付宝当面付',
'auth_code' =>$auth_code,
];
try {
$wechat = Pay::wechat($config)->pos($order);
}catch (\Exception $e){
//echo $e->getMessage();
// die(); // 终止异常
}
if($wechat->return_code=='SUCCESS'&&$wechat->return_code=='OK'&&$wechat->result_code=='SUCCESS'){
echo json_encode(['code'=>1,'msg'=>'支付成功']);die;
}else{
$wechat = Pay::wechat($config)->find($outTradeNo);
if($wechat->return_code=='SUCCESS'&&$wechat->return_code=='OK'&&$wechat->result_code=='SUCCESS'){
echo json_encode(['code'=>1,'msg'=>'支付成功']);die;
}else{
echo json_encode(['code'=>1,'msg'=>'订单取消']);die;
}
}
}
}
}