mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-03 04:10:20 +08:00
Add ExtendProductWithProviders().
This commit is contained in:
@ -92,7 +92,6 @@ p, *, *, POST, /api/buy-product, *, *
|
|||||||
p, *, *, GET, /api/get-payment, *, *
|
p, *, *, GET, /api/get-payment, *, *
|
||||||
p, *, *, POST, /api/update-payment, *, *
|
p, *, *, POST, /api/update-payment, *, *
|
||||||
p, *, *, POST, /api/invoice-payment, *, *
|
p, *, *, POST, /api/invoice-payment, *, *
|
||||||
p, *, *, GET, /api/get-providers, *, *
|
|
||||||
p, *, *, POST, /api/notify-payment, *, *
|
p, *, *, POST, /api/notify-payment, *, *
|
||||||
p, *, *, POST, /api/unlink, *, *
|
p, *, *, POST, /api/unlink, *, *
|
||||||
p, *, *, POST, /api/set-password, *, *
|
p, *, *, POST, /api/set-password, *, *
|
||||||
|
@ -58,7 +58,10 @@ func (c *ApiController) GetProducts() {
|
|||||||
func (c *ApiController) GetProduct() {
|
func (c *ApiController) GetProduct() {
|
||||||
id := c.Input().Get("id")
|
id := c.Input().Get("id")
|
||||||
|
|
||||||
c.Data["json"] = object.GetProduct(id)
|
product := object.GetProduct(id)
|
||||||
|
object.ExtendProductWithProviders(product)
|
||||||
|
|
||||||
|
c.Data["json"] = product
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,8 @@ type Product struct {
|
|||||||
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
|
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
|
||||||
|
|
||||||
State string `xorm:"varchar(100)" json:"state"`
|
State string `xorm:"varchar(100)" json:"state"`
|
||||||
|
|
||||||
|
ProviderObjs []*Provider `xorm:"-" json:"providerObjs"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetProductCount(owner, field, value string) int {
|
func GetProductCount(owner, field, value string) int {
|
||||||
@ -209,3 +211,14 @@ func BuyProduct(id string, providerName string, user *User, host string) (string
|
|||||||
|
|
||||||
return payUrl, err
|
return payUrl, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExtendProductWithProviders(product *Product) {
|
||||||
|
product.ProviderObjs = []*Provider{}
|
||||||
|
|
||||||
|
m := getProviderMap(product.Owner)
|
||||||
|
for _, providerItem := range product.Providers {
|
||||||
|
if provider, ok := m[providerItem]; ok {
|
||||||
|
product.ProviderObjs = append(product.ProviderObjs, provider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -16,7 +16,6 @@ import React from "react";
|
|||||||
import {Button, Descriptions, Spin} from "antd";
|
import {Button, Descriptions, Spin} from "antd";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import * as ProductBackend from "./backend/ProductBackend";
|
import * as ProductBackend from "./backend/ProductBackend";
|
||||||
import * as ProviderBackend from "./backend/ProviderBackend";
|
|
||||||
import * as Setting from "./Setting";
|
import * as Setting from "./Setting";
|
||||||
|
|
||||||
class ProductBuyPage extends React.Component {
|
class ProductBuyPage extends React.Component {
|
||||||
@ -26,14 +25,12 @@ class ProductBuyPage extends React.Component {
|
|||||||
classes: props,
|
classes: props,
|
||||||
productName: props.match?.params.productName,
|
productName: props.match?.params.productName,
|
||||||
product: null,
|
product: null,
|
||||||
providers: [],
|
|
||||||
isPlacingOrder: false,
|
isPlacingOrder: false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
UNSAFE_componentWillMount() {
|
UNSAFE_componentWillMount() {
|
||||||
this.getProduct();
|
this.getProduct();
|
||||||
this.getPaymentProviders();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getProduct() {
|
getProduct() {
|
||||||
@ -45,15 +42,6 @@ class ProductBuyPage extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getPaymentProviders() {
|
|
||||||
ProviderBackend.getProviders("admin")
|
|
||||||
.then((res) => {
|
|
||||||
this.setState({
|
|
||||||
providers: res.filter(provider => provider.category === "Payment"),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
getProductObj() {
|
getProductObj() {
|
||||||
if (this.props.product !== undefined) {
|
if (this.props.product !== undefined) {
|
||||||
return this.props.product;
|
return this.props.product;
|
||||||
@ -86,32 +74,6 @@ class ProductBuyPage extends React.Component {
|
|||||||
return `${this.getCurrencySymbol(product)}${product?.price} (${this.getCurrencyText(product)})`;
|
return `${this.getCurrencySymbol(product)}${product?.price} (${this.getCurrencyText(product)})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
getProviders(product) {
|
|
||||||
if (this.state.providers.length === 0 || product.providers.length === 0) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
let providerMap = {};
|
|
||||||
this.state.providers.forEach(provider => {
|
|
||||||
providerMap[provider.name] = provider;
|
|
||||||
});
|
|
||||||
|
|
||||||
return product.providers.map(providerName => providerMap[providerName]);
|
|
||||||
}
|
|
||||||
|
|
||||||
getPayUrl(product, provider) {
|
|
||||||
if (product === null || provider === null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
return `https://${provider.type}`;
|
|
||||||
// if (provider.type === "WeChat") {
|
|
||||||
// return `${endpoint}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}`;
|
|
||||||
// } else if (provider.type === "GitHub") {
|
|
||||||
// return `${endpoint}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}`;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
buyProduct(product, provider) {
|
buyProduct(product, provider) {
|
||||||
this.setState({
|
this.setState({
|
||||||
isPlacingOrder: true,
|
isPlacingOrder: true,
|
||||||
@ -176,12 +138,11 @@ class ProductBuyPage extends React.Component {
|
|||||||
if (product.state !== "Published") {
|
if (product.state !== "Published") {
|
||||||
return i18next.t("product:This product is currently not in sale.");
|
return i18next.t("product:This product is currently not in sale.");
|
||||||
}
|
}
|
||||||
if (product.providers.length === 0) {
|
if (product.providerObjs.length === 0) {
|
||||||
return i18next.t("product:There is no payment channel for this product.");
|
return i18next.t("product:There is no payment channel for this product.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const providers = this.getProviders(product);
|
return product.providerObjs.map(provider => {
|
||||||
return providers.map(provider => {
|
|
||||||
return this.renderProviderButton(provider, product);
|
return this.renderProviderButton(provider, product);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user