2022-03-13 18:05:16 +08:00
// Copyright 2022 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import React from "react" ;
2022-07-10 15:45:55 +08:00
import { Button , Result , Spin } from "antd" ;
2022-03-13 18:05:16 +08:00
import * as PaymentBackend from "./backend/PaymentBackend" ;
import * as Setting from "./Setting" ;
import i18next from "i18next" ;
class PaymentResultPage extends React . Component {
constructor ( props ) {
super ( props ) ;
this . state = {
classes : props ,
paymentName : props . match . params . paymentName ,
2023-07-30 11:54:42 +08:00
organizationName : props . match . params . organizationName ,
2022-03-13 18:05:16 +08:00
payment : null ,
2023-06-13 02:00:52 +08:00
timeout : null ,
2022-03-13 18:05:16 +08:00
} ;
}
UNSAFE _componentWillMount ( ) {
this . getPayment ( ) ;
}
2023-06-13 02:00:52 +08:00
componentWillUnmount ( ) {
if ( this . state . timeout !== null ) {
clearTimeout ( this . state . timeout ) ;
}
}
2022-03-13 18:05:16 +08:00
getPayment ( ) {
2023-07-30 11:54:42 +08:00
PaymentBackend . getPayment ( this . state . organizationName , this . state . paymentName )
2023-07-24 14:52:30 +08:00
. then ( ( res ) => {
2022-03-13 18:05:16 +08:00
this . setState ( {
2023-07-24 14:52:30 +08:00
payment : res . data ,
2022-03-13 18:05:16 +08:00
} ) ;
2023-07-30 11:54:42 +08:00
// window.console.log("payment=", res.data);
2023-07-24 14:52:30 +08:00
if ( res . data . state === "Created" ) {
2023-07-30 11:54:42 +08:00
if ( res . data . type === "PayPal" ) {
this . setState ( {
timeout : setTimeout ( ( ) => {
PaymentBackend . notifyPayment ( this . state . organizationName , this . state . paymentName )
. then ( ( res ) => {
this . getPayment ( ) ;
} ) ;
} , 1000 ) ,
} ) ;
} else {
this . setState ( { timeout : setTimeout ( ( ) => this . getPayment ( ) , 1000 ) } ) ;
}
2022-03-13 18:05:16 +08:00
}
} ) ;
}
2023-07-30 11:54:42 +08:00
goToPaymentUrl ( payment ) {
if ( payment . returnUrl === undefined || payment . returnUrl === null || payment . returnUrl === "" ) {
Setting . goToLink ( ` ${ window . location . origin } /products/ ${ payment . owner } / ${ payment . productName } /buy ` ) ;
} else {
Setting . goToLink ( payment . returnUrl ) ;
}
}
2022-03-13 18:05:16 +08:00
render ( ) {
const payment = this . state . payment ;
if ( payment === null ) {
return null ;
}
if ( payment . state === "Paid" ) {
return (
< div >
{
Setting . renderHelmet ( payment )
}
< Result
status = "success"
2022-03-14 02:07:55 +08:00
title = { ` ${ i18next . t ( "payment:You have successfully completed the payment" ) } : ${ payment . productDisplayName } ` }
2022-03-13 18:05:16 +08:00
subTitle = { i18next . t ( "payment:Please click the below button to return to the original website" ) }
extra = { [
< Button type = "primary" key = "returnUrl" onClick = { ( ) => {
2023-07-30 11:54:42 +08:00
this . goToPaymentUrl ( payment ) ;
2022-03-13 18:05:16 +08:00
} } >
{ i18next . t ( "payment:Return to Website" ) }
2022-08-06 23:54:56 +08:00
< / B u t t o n > ,
2022-03-13 18:05:16 +08:00
] }
/ >
< / d i v >
2022-07-10 15:45:55 +08:00
) ;
2022-03-13 18:05:16 +08:00
} else if ( payment . state === "Created" ) {
return (
< div >
{
Setting . renderHelmet ( payment )
}
< Result
status = "info"
2022-03-14 02:07:55 +08:00
title = { ` ${ i18next . t ( "payment:The payment is still under processing" ) } : ${ payment . productDisplayName } , ${ i18next . t ( "payment:the current state is" ) } : ${ payment . state } , ${ i18next . t ( "payment:please wait for a few seconds..." ) } ` }
2022-03-13 18:05:16 +08:00
subTitle = { i18next . t ( "payment:Please click the below button to return to the original website" ) }
extra = { [
2022-08-09 12:19:56 +08:00
< Spin key = "returnUrl" size = "large" tip = { i18next . t ( "payment:Processing..." ) } / > ,
2022-03-13 18:05:16 +08:00
] }
/ >
< / d i v >
2022-07-10 15:45:55 +08:00
) ;
2022-03-13 18:05:16 +08:00
} else {
return (
< div >
{
Setting . renderHelmet ( payment )
}
< Result
status = "error"
2022-03-14 02:07:55 +08:00
title = { ` ${ i18next . t ( "payment:The payment has failed" ) } : ${ payment . productDisplayName } , ${ i18next . t ( "payment:the current state is" ) } : ${ payment . state } ` }
2022-03-13 18:05:16 +08:00
subTitle = { i18next . t ( "payment:Please click the below button to return to the original website" ) }
extra = { [
< Button type = "primary" key = "returnUrl" onClick = { ( ) => {
2023-07-30 11:54:42 +08:00
this . goToPaymentUrl ( payment ) ;
2022-03-13 18:05:16 +08:00
} } >
{ i18next . t ( "payment:Return to Website" ) }
2022-08-06 23:54:56 +08:00
< / B u t t o n > ,
2022-03-13 18:05:16 +08:00
] }
/ >
< / d i v >
2022-07-10 15:45:55 +08:00
) ;
2022-03-13 18:05:16 +08:00
}
}
}
export default PaymentResultPage ;