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"; } } }