Files
addons
app_download_files
extend
hyhproject
admin
app
common
home
home2
mobile2
common
conf
controller
Alipays.php
Areas.php
Base.php
Brands.php
Carts.php
Cashconfigs.php
Cashdraws.php
Demo.php
Error.php
Favorites.php
Goods.php
Goodsappraises.php
Goodscats.php
Goodsconsult.php
Index.php
Invoices.php
Juhui.php
Logmoneys.php
Messages.php
News.php
Ordercomplains.php
Orderrefunds.php
Orders.php
Promotion.php
Shops.php
Switchs.php
Unionpays.php
Useraddress.php
Users.php
Userscores.php
Wallets.php
Weixinpays.php
model
validate
view
wechat2
.htaccess
command.php
mobile
oss
static
thinkphp
upload
vendor
wxtmp
.gitignore
.htaccess
.user.ini
404.html
H5B854518.wgt
admin.php
app-release.apk
app_download.html
cash.lock
demo.php
get_startup.php
get_version.php
get_version_new.php
hyhproject.tar.gz
index.html
index.php
reg.lock
robots.txt
qlg.tsgz.moe/hyhproject/mobile2/controller/Alipays.php
2019-09-06 23:53:10 +08:00

248 lines
8.7 KiB
PHP
Executable File

<?php
namespace wstmart\mobile\controller;
use think\Loader;
use wstmart\common\model\Payments as M;
use wstmart\mobile\model\Orders as OM;
use wstmart\common\model\LogPayParams as PM;
use wstmart\common\model\ChargeItems as CM;
use wstmart\common\model\LogMoneys as LM;
/**
* ============================================================================
* 阿里支付控制器
*/
class Alipays extends Base{
/**
* 初始化
*/
private $alipayConfig;
public function _initialize() {
header ("Content-type: text/html; charset=utf-8");
Loader::import ( 'alipay.Corefunction' );
Loader::import ( 'alipay.Md5function' );
Loader::import ( 'alipay.AlipayNotify' );
Loader::import ( 'alipay.AlipaySubmit' );
$m = new M();
$payment = $m->getPayment("alipays");
$this->alipayConfig = array(
'partner' =>$payment['parterID'], //这里是你在成功申请支付宝接口后获取到的PID;
'key'=>$payment['parterKey'],//这里是你在成功申请支付宝接口后获取到的Key
'seller_email'=>$payment['payAccount'],
'sign_type'=>strtoupper('MD5'),
'input_charset'=> strtolower('utf-8'),
'cacert'=>'',
'transport'=> 'http'
);
}
/**
* 支付宝支付跳转方法
*/
public function toAliPay(){
$payObj = input("payObj/s");
$call_back_url = "";
$notify_url = "";
$subject = "";
$total_fee = 0;
$transId = 0;
$userId = 0;
$payParams = array();
if($payObj=="recharge"){//充值
$itemId = (int)input("itemId/d");
$orderAmount = 0;
if($itemId>0){
$cm = new CM();
$item = $cm->getItemMoney($itemId);
$total_fee = isSet($item["chargeMoney"])?$item["chargeMoney"]:0;
}else{
$total_fee = (int)input("needPay/d");
}
$shopId = (int)session('WST_USER.shopId');
$targetType = ($shopId>0)?1:0;
$targetId = (int)session('WST_USER.userId');
if($targetType==1){//商家
$targetId = $shopId;
}
$userId = $targetId;
$out_trade_no = WSTOrderNo();
$transId = $out_trade_no;
$payParams["targetId"] = $targetId;
$payParams["targetType"] = $targetType;
$payParams["itemId"] = $itemId;
$payParams["payObj"] = $payObj;
$call_back_url = url("mobile/users/index","",true,true);
$notify_url = url("mobile/alipays/aliNotify","",true,true);
$subject = '钱包充值';
}else{
$orderNo = input('orderNo');
$isBatch = (int)input('isBatch');
$userId = (int)session('WST_USER.userId');
$m = new OM();
$obj = array();
$obj["userId"] = $userId;
$obj["orderNo"] = input("orderNo/s");
$obj["isBatch"] = (int)input("isBatch/d");
$rs = $m->getOrderPayInfo($obj);
if(empty($rs)){
$this->assign('type','');
return $this->fetch("users/orders/orders_list");
}else{
$m = new M();
$om = new OM();
$data = $om->checkOrderPay($obj);
if($data["status"]==-1){
echo "<span style='font-size:40px;'>您的订单已支付,不要重复支付!</span>";
return;
}else if($data["status"]==-2){
echo "<span style='font-size:40px;'>您的订单因商品库存不足,不能支付!</span>";
return;
}
}
$order = $om->getPayOrders($obj);
$total_fee = $order["needPay"];
$payRand = $order["payRand"];
$out_trade_no = $obj["orderNo"]."a".$payRand;
$transId = $obj["orderNo"];
$payParams["userId"] = $userId;
$payParams["isBatch"] = $isBatch;
$payParams["orderNo"] = $orderNo;
$call_back_url = url("mobile/orders/index","",true,true);
$notify_url = url("mobile/alipays/aliNotify","",true,true);
$subject = '支付购买商品费用';
}
$format = "xml";
$v = "2.0";
$req_id = date('Ymdhis');
$merchant_url = "";
$seller_email = $this->alipayConfig['seller_email'];
$req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee><merchant_url>' . $merchant_url . '</merchant_url></direct_trade_create_req>';
//构造要请求的参数数组,无需改动
$para_token = array(
"service" => "alipay.wap.trade.create.direct",
"partner" => trim($this->alipayConfig['partner']),
"sec_id" => trim($this->alipayConfig['sign_type']),
"format" => $format,
"v" => $v,
"req_id" => $req_id,
"req_data" => $req_data,
"_input_charset" => trim(strtolower($this->alipayConfig['input_charset']))
);
//建立请求
$alipaySubmit = new \AlipaySubmit($this->alipayConfig);
$html_text = $alipaySubmit->buildRequestHttp($para_token);
//URLDECODE返回的信息
$html_text = urldecode($html_text);
//解析远程模拟提交后返回的信息
$para_html_text = $alipaySubmit->parseResponse($html_text);
//获取request_token
$request_token = $para_html_text['request_token'];
//**************************根据授权码token调用交易接口alipay.wap.auth.authAndExecute**************************
//业务详细
$req_data = '<auth_and_execute_req><request_token>' . $request_token . '</request_token></auth_and_execute_req>';
//必填
//构造要请求的参数数组,无需改动
$parameter = array(
"service" => "alipay.wap.auth.authAndExecute",
"partner" => trim($this->alipayConfig['partner']),
"sec_id" => trim($this->alipayConfig['sign_type']),
"format" => $format,
"v" => $v,
"req_id" => $req_id,
"req_data" => $req_data,
"_input_charset" => trim(strtolower($this->alipayConfig['input_charset']))
);
$data = array();
$data["userId"] = $userId;
$data["transId"] = $transId;
$data["paramsVa"] = json_encode($payParams);
$data["payFrom"] = 'alipays';
$m = new PM();
$m->addPayLog($data);
//建立请求
$alipaySubmit = new \AlipaySubmit($this->alipayConfig);
$html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '');
echo $html_text;
}
/**
* 服务器异步通知页面方法
*
*/
function aliNotify() {
$om = new OM();
// 计算得出通知验证结果
$alipayNotify = new \AlipayNotify ( $this->alipayConfig );
$verify_result = $alipayNotify->verifyNotify ();
if ($verify_result) {
$notify_data = $_POST['notify_data'];
// 获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
// 解析notify_data
// 注意:该功能PHP5环境及以上支持,需开通curl、SSL等PHP配置环境。建议本地调试时使用PHP开发软件
$doc = new \DOMDocument ();
$doc->loadXML ( $notify_data );
if (! empty ( $doc->getElementsByTagName ( "notify" )->item ( 0 )->nodeValue )) {
// 交易号
$trade_no = $doc->getElementsByTagName ( "trade_no" )->item ( 0 )->nodeValue;
// 商户订单号
$out_trade_no = $doc->getElementsByTagName ( "out_trade_no" )->item ( 0 )->nodeValue;
$total_fee = $doc->getElementsByTagName( "total_fee" )->item(0)->nodeValue;
// 支付宝交易号
$trade_no = $doc->getElementsByTagName ( "trade_no" )->item ( 0 )->nodeValue;
// 交易状态
$trade_status = $doc->getElementsByTagName ( "trade_status" )->item ( 0 )->nodeValue;
if ($trade_status == 'TRADE_FINISHED' OR $trade_status == 'TRADE_SUCCESS') {
$obj["trade_no"] = $trade_no;
$tradeNo = explode("a",$out_trade_no);
$obj["out_trade_no"] = $tradeNo[0];
$obj["payFrom"] = 'alipays';
$obj["total_fee"] = $total_fee;
$m = new PM();
$payParams = $m->getPayLog(["transId"=>$obj["out_trade_no"]]);
if(isSet($payParams["payObj"]) && $payParams["payObj"]=='recharge'){
$obj["targetId"] = $payParams["targetId"];
$obj["targetType"] = $payParams["targetType"];
$obj["itemId"] = $payParams["itemId"];;
// 支付成功业务逻辑
$m = new LM();
$rs = $m->complateRecharge ( $obj );
}else{
//$payFrom = $om->getOrderPayFrom($tradeNo[0]);
$obj["userId"] = $payParams["userId"];
$obj["isBatch"] = $payParams["isBatch"];
//支付成功业务逻辑
$rs = $om->complatePay($obj);
}
if($rs["status"]==1){
echo 'success';
}else{
echo 'fail';
}
}
//echo "success"; // 请不要修改或删除
}
} else {
// 验证失败
echo "fail";
}
}
}