支付bug

This commit is contained in:
wangjinlei
2025-11-26 17:39:35 +08:00
parent f7641d4654
commit b8dc9ded3a
3 changed files with 94 additions and 66 deletions

View File

@@ -55,6 +55,7 @@ class Order extends base{
public function completePaystation(){
Log::log("payStation:act ".date("Y-m-d H:i:s"));
$data = $this->request->post();
if(!isset($data['transaction_id'])|| !$data['result']['success']){
return jsonError("Paystation responds with no results or result fail");
@@ -73,7 +74,39 @@ class Order extends base{
public function testPaystationLookup(){
public function PaystationLookup(){
$data = $this->request->post();
$rule = new Validate([
"article_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$article_info = $this->article_obj->where("article_id",$data['article_id'])->find();
$order_info = $this->order_obj->where("article_id",$article_info['article_id'])->whereIn("state",[0,1])->find();
if($order_info==null){
return jsonError("no order");
}
sleep(2);
$paystation_info = $this->paystation_obj->where("ps_id",$order_info['ps_id'])->find();
$response = paystationLookup($paystation_info["merchant_session"]);
$res = xml_to_array($response);
if(isset($res['PaystationQuickLookup']['LookupResponse']['Authentication']['auth_Status'])&&$res['PaystationQuickLookup']['LookupResponse']['Authentication']['auth_Status']=="Y"){
$this->article_obj->where("article_id",$order_info['article_id'])->update(['is_buy'=>1]);
$this->order_obj->where("order_id",$order_info['order_id'])->update(['state'=>1]);
return jsonSuccess(["result"=>"success","paystation"=>$paystation_info]);
}else{
return jsonSuccess(['result'=>"fail"]);
}
}
public function testPaystationLookup1(){
$data = $this->request->post();
$rule = new Validate([
"ms"=>"require"
@@ -81,43 +114,8 @@ class Order extends base{
if(!$rule->check($data)){
return jsonError($rule->getError());
}
$param = "pi=616562&ms=".$data['ms'];
$url = "https://payments.paystation.co.nz/lookup?".$param;
$res = myGet($url);
return jsonSuccess($res);
}
public function testPaystationLookup1(){
$data = $this->request->post();
$rule = new Validate([
"transaction_id"=>"require"
]);
if(!$rule->check($data)){
return jsonError($rule->getError());
}
// $accessToken = createPayStationToken();
// $curl = curl_init();
// curl_setopt_array($curl, array(
// CURLOPT_URL => 'https://api.paystation.co.nz/v1/transactions/'.$data['transaction_id'],
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => '',
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 0,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => 'GET',
// CURLOPT_HTTPHEADER => array(
// 'Content-Type: application/json',
// 'Authorization: Bearer '.$accessToken
// )
// ));
// $response = curl_exec($curl);
// curl_close($curl);
$response = paystationLookup($data['transaction_id']);
$res = object_to_array(json_decode($response));
$response = paystationLookup($data['ms']);
$res = xml_to_array($response);
return jsonSuccess($res);
}
@@ -146,7 +144,7 @@ class Order extends base{
$params["pstn_HMAC"] = $hmac_signature;
$url_with_params = $url . '?' . http_build_query($params);
echo $url_with_params;
// echo $url_with_params;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_with_params);
@@ -180,8 +178,8 @@ class Order extends base{
if($order_info['pay_type']==2){
$paystation = $this->paystation_obj->where("ps_id",$order_info['ps_id'])->find();
if($order_info['state']==0){
$res = object_to_array(json_decode(paystationLookup($paystation['transaction_id'])));
if(isset($res['result']['success'])&&$res['result']['success']){
$res = xml_to_array(paystationLookup($paystation['merchant_session']));
if(isset($res['PaystationQuickLookup']['LookupResponse']['PaystationErrorMessage'])&&$res['PaystationQuickLookup']['LookupResponse']['PaystationErrorMessage']=='Transaction successful'){
$this->article_obj->where("article_id",$order_info['article_id'])->update(['is_buy'=>1]);
$this->order_obj->where("order_id",$order_info['order_id'])->update(['state'=>1]);
}

View File

@@ -753,7 +753,16 @@ class Preaccept extends Base
$article_info = $this->article_obj->where("article_id",$data['article_id'])->find();
$journal_info = $this->journal_obj->where("journal_id",$article_info['journal_id'])->find();
$order_info = $this->order_obj->where("article_id",$article_info['article_id'])->find();
$order_info['paystation'] = $this->paystation_obj->where("ps_id",$order_info['ps_id'])->find();
$paystation = $this->paystation_obj->where("ps_id",$order_info['ps_id'])->find();
$order_info['paystation'] = $paystation;
if($order_info['state']==0){
$res = xml_to_array(paystationLookup($paystation['merchant_session']));
if(isset($res['PaystationQuickLookup']['LookupResponse']['Authentication']['auth_Status'])&&$res['PaystationQuickLookup']['LookupResponse']['Authentication']['auth_Status']=="Y"){
$this->article_obj->where("article_id",$order_info['article_id'])->update(['is_buy'=>1]);
$this->order_obj->where("order_id",$order_info['order_id'])->update(['state'=>1]);
$article_info = $this->article_obj->where("article_id",$data['article_id'])->find();
}
}
$re['state'] = $article_info['is_buy'];
$re['order'] = $order_info;
$re["fee"] = $article_info['fee'];
@@ -762,12 +771,6 @@ class Preaccept extends Base
return jsonSuccess($re);
// if(intval($journal_info['fee'])==0||$article_info['ctime']<1735660800){//非收费期刊的文章直接返回
// $re['state'] = 1;
// $re['order'] = null;

View File

@@ -998,27 +998,54 @@ function aliemail($email,$title,$content,$has_hb=1){
return $res;
}
function paystationLookup($transactionId){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.paystation.co.nz/v1/transactions/'.$transactionId,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer '.createPayStationToken()
)
));
$response = curl_exec($curl);
curl_close($curl);
//function paystationLookup($transactionId){
// $curl = curl_init();
// curl_setopt_array($curl, array(
// CURLOPT_URL => 'https://api.paystation.co.nz/v1/transactions/'.$transactionId,
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => '',
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 0,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => 'GET',
// CURLOPT_HTTPHEADER => array(
// 'Content-Type: application/json',
// 'Authorization: Bearer '.createPayStationToken()
// )
// ));
// $response = curl_exec($curl);
// curl_close($curl);
// return $response;
//}
function paystationLookup($ms){
$url = "https://payments.paystation.co.nz/lookup/";
$time = time();
$params = [
"pi" => "616562",
"ms" => $ms,
"pstn_HMACTimestamp" => $time
];
$secret_key = Env::get("paystation.hmac");// 使用提供的HMAC认证密钥
$query_string = http_build_query($params);
$hmac_signature = hash_hmac('sha256', $time."paystation".$query_string,$secret_key);
$params["pstn_HMAC"] = $hmac_signature;
$url_with_params = $url . '?' . http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_with_params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $response;
}
function createPayStationToken(){
$bodyParams = [
'client_id' => Env::get("paystation.client_id"),