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 "您的订单已支付,不要重复支付!";
return;
}else if($data["status"]==-2){
echo "您的订单因商品库存不足,不能支付!";
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 = '' . $notify_url . '' . $call_back_url . '' . $seller_email . '' . $out_trade_no . '' . $subject . '' . $total_fee . '' . $merchant_url . '';
//构造要请求的参数数组,无需改动
$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 = '' . $request_token . '';
//必填
//构造要请求的参数数组,无需改动
$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";
}
}
}