From f5590c42f788d526a36931dfbceffb63f078cc7b Mon Sep 17 00:00:00 2001 From: Gucheng Wang Date: Wed, 27 Apr 2022 21:24:50 +0800 Subject: [PATCH] Add payerName to provider. --- object/product.go | 3 ++- pp/alipay.go | 2 +- pp/gc.go | 24 ++++++++++++++++++------ pp/provider.go | 2 +- web/src/PaymentEditPage.js | 14 ++++++++++---- web/src/Setting.js | 2 ++ 6 files changed, 34 insertions(+), 13 deletions(-) diff --git a/object/product.go b/object/product.go index 86e859ca..6548acc7 100644 --- a/object/product.go +++ b/object/product.go @@ -170,6 +170,7 @@ func BuyProduct(id string, providerName string, user *User, host string) (string owner := product.Owner productName := product.Name + payerName := fmt.Sprintf("%s | %s", user.Name, user.DisplayName) paymentName := util.GenerateTimeId() productDisplayName := product.DisplayName @@ -177,7 +178,7 @@ func BuyProduct(id string, providerName string, user *User, host string) (string returnUrl := fmt.Sprintf("%s/payments/%s/result", originFrontend, paymentName) notifyUrl := fmt.Sprintf("%s/api/notify-payment/%s/%s/%s/%s", originBackend, owner, providerName, productName, paymentName) - payUrl, err := pProvider.Pay(providerName, productName, paymentName, productDisplayName, product.Price, returnUrl, notifyUrl) + payUrl, err := pProvider.Pay(providerName, productName, payerName, paymentName, productDisplayName, product.Price, returnUrl, notifyUrl) if err != nil { return "", err } diff --git a/pp/alipay.go b/pp/alipay.go index aaabc1b2..3da45992 100644 --- a/pp/alipay.go +++ b/pp/alipay.go @@ -45,7 +45,7 @@ func NewAlipayPaymentProvider(appId string, appPublicKey string, appPrivateKey s return pp } -func (pp *AlipayPaymentProvider) Pay(providerName string, productName string, paymentName string, productDisplayName string, price float64, returnUrl string, notifyUrl string) (string, error) { +func (pp *AlipayPaymentProvider) Pay(providerName string, productName string, payerName string, paymentName string, productDisplayName string, price float64, returnUrl string, notifyUrl string) (string, error) { //pp.Client.DebugSwitch = gopay.DebugOn bm := gopay.BodyMap{} diff --git a/pp/gc.go b/pp/gc.go index abf2fcd7..d2f3ee29 100644 --- a/pp/gc.go +++ b/pp/gc.go @@ -38,11 +38,14 @@ type GcPayReqInfo struct { OrderDate string `json:"orderdate"` OrderNo string `json:"orderno"` Amount string `json:"amount"` - PayerId string `json:"payerid"` - PayerName string `json:"payername"` Xmpch string `json:"xmpch"` + Body string `json:"body"` ReturnUrl string `json:"return_url"` NotifyUrl string `json:"notify_url"` + PayerId string `json:"payerid"` + PayerName string `json:"payername"` + Remark1 string `json:"remark1"` + Remark2 string `json:"remark2"` } type GcPayRespInfo struct { @@ -151,16 +154,17 @@ func (pp *GcPaymentProvider) doPost(postBytes []byte) ([]byte, error) { return respBytes, nil } -func (pp *GcPaymentProvider) Pay(providerName string, productName string, paymentName string, productDisplayName string, price float64, returnUrl string, notifyUrl string) (string, error) { +func (pp *GcPaymentProvider) Pay(providerName string, productName string, payerName string, paymentName string, productDisplayName string, price float64, returnUrl string, notifyUrl string) (string, error) { payReqInfo := GcPayReqInfo{ OrderDate: util.GenerateSimpleTimeId(), - OrderNo: util.GenerateTimeId(), + OrderNo: paymentName, Amount: getPriceString(price), - PayerId: "", - PayerName: "", Xmpch: pp.Xmpch, + Body: productDisplayName, ReturnUrl: returnUrl, NotifyUrl: notifyUrl, + Remark1: payerName, + Remark2: productName, } b, err := json.Marshal(payReqInfo) @@ -316,5 +320,13 @@ func (pp *GcPaymentProvider) GetInvoice(paymentName string, personName string, p return "", err } + if invoiceRespInfo.State == "0" { + return "", fmt.Errorf("申请成功,开票中") + } + + if invoiceRespInfo.Url == "" { + return "", fmt.Errorf("invoice URL is empty") + } + return invoiceRespInfo.Url, nil } diff --git a/pp/provider.go b/pp/provider.go index fbd92684..5c238f4a 100644 --- a/pp/provider.go +++ b/pp/provider.go @@ -17,7 +17,7 @@ package pp import "net/http" type PaymentProvider interface { - Pay(providerName string, productName string, paymentName string, productDisplayName string, price float64, returnUrl string, notifyUrl string) (string, error) + Pay(providerName string, productName string, payerName string, paymentName string, productDisplayName string, price float64, returnUrl string, notifyUrl string) (string, error) Notify(request *http.Request, body []byte, authorityPublicKey string) (string, string, float64, string, string, error) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error) } diff --git a/web/src/PaymentEditPage.js b/web/src/PaymentEditPage.js index b8d2103c..8093083c 100644 --- a/web/src/PaymentEditPage.js +++ b/web/src/PaymentEditPage.js @@ -30,6 +30,7 @@ class PaymentEditPage extends React.Component { paymentName: props.match.params.paymentName, payment: null, isModalVisible: false, + isInvoiceLoading: false, mode: props.location.mode !== undefined ? props.location.mode : "edit", }; } @@ -69,20 +70,25 @@ class PaymentEditPage extends React.Component { issueInvoice() { this.setState({ isModalVisible: false, + isInvoiceLoading: true, }); PaymentBackend.invoicePayment(this.state.payment.owner, this.state.paymentName) .then((res) => { + this.setState({ + isInvoiceLoading: false, + }); if (res.msg === "") { Setting.showMessage("success", `Successfully invoiced`); - this.setState({ - paymentName: this.state.payment.name, - }); + window.location.reload(); } else { - Setting.showMessage("error", res.msg); + Setting.showMessage(res.msg.includes("成功") ? "info" : "error", res.msg); } }) .catch(error => { + this.setState({ + isInvoiceLoading: false, + }); Setting.showMessage("error", `Failed to connect to server: ${error}`); }); } diff --git a/web/src/Setting.js b/web/src/Setting.js index 3e5bdf59..c3922439 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -337,6 +337,8 @@ export function showMessage(type, text) { message.success(text); } else if (type === "error") { message.error(text); + } else if (type === "info") { + message.info(text); } }