297 lines
7.0 KiB
Bash
Executable File
297 lines
7.0 KiB
Bash
Executable File
# pdl_sdbx_apikey_01m3pv5nbpjq94nh2hzqwhzbv5_TW7kG6xyGMcbxFAnEAtKqc_ALK
|
|
|
|
#client side
|
|
# pdl_sdbx_apikey_01m3pveweeskjzz1rc8f12a7x3_G9qWxtDBxGZJWa3f7VGKz6_A15
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
PADDLE_API="https://sandbox-api.paddle.com"
|
|
PRODUCT_ID="pro_01m3ptwmqy8npywsq4h4q27p0w"
|
|
OUTPUT_FILE=".env.paddle"
|
|
|
|
echo "============================================================"
|
|
echo " SonarDesk Paddle SANDBOX Price Setup"
|
|
echo "============================================================"
|
|
echo
|
|
echo "Product: $PRODUCT_ID"
|
|
echo
|
|
|
|
command -v curl >/dev/null || {
|
|
echo "ERROR: curl is required"
|
|
exit 1
|
|
}
|
|
|
|
command -v jq >/dev/null || {
|
|
echo "ERROR: jq is required"
|
|
echo "Install with: brew install jq"
|
|
exit 1
|
|
}
|
|
|
|
read -rsp "Enter Paddle SANDBOX API key: " PADDLE_API_KEY
|
|
echo
|
|
echo
|
|
|
|
if [[ -z "$PADDLE_API_KEY" ]]; then
|
|
echo "ERROR: No API key supplied."
|
|
exit 1
|
|
fi
|
|
|
|
# ------------------------------------------------------------
|
|
# API request helper
|
|
# ------------------------------------------------------------
|
|
|
|
api_request() {
|
|
local method="$1"
|
|
local endpoint="$2"
|
|
local data="${3:-}"
|
|
|
|
local tmp
|
|
tmp="$(mktemp)"
|
|
|
|
if [[ "$method" == "GET" ]]; then
|
|
HTTP_CODE=$(curl -sS \
|
|
-o "$tmp" \
|
|
-w "%{http_code}" \
|
|
-H "Authorization: Bearer ${PADDLE_API_KEY}" \
|
|
-H "Content-Type: application/json" \
|
|
"${PADDLE_API}${endpoint}")
|
|
else
|
|
HTTP_CODE=$(curl -sS \
|
|
-o "$tmp" \
|
|
-w "%{http_code}" \
|
|
-X "$method" \
|
|
-H "Authorization: Bearer ${PADDLE_API_KEY}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$data" \
|
|
"${PADDLE_API}${endpoint}")
|
|
fi
|
|
|
|
RESPONSE="$(cat "$tmp")"
|
|
rm -f "$tmp"
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# Verify API key
|
|
# ------------------------------------------------------------
|
|
|
|
echo "1. Testing Paddle API key..."
|
|
|
|
api_request GET "/event-types"
|
|
|
|
if [[ "$HTTP_CODE" != "200" ]]; then
|
|
echo
|
|
echo "ERROR: Paddle rejected the API key."
|
|
echo "HTTP: $HTTP_CODE"
|
|
echo
|
|
echo "$RESPONSE" | jq . 2>/dev/null || echo "$RESPONSE"
|
|
exit 1
|
|
fi
|
|
|
|
echo " ✓ API key works"
|
|
echo
|
|
|
|
# ------------------------------------------------------------
|
|
# Verify product
|
|
# ------------------------------------------------------------
|
|
|
|
echo "2. Checking SonarDesk product..."
|
|
|
|
api_request GET "/products/${PRODUCT_ID}"
|
|
|
|
if [[ "$HTTP_CODE" != "200" ]]; then
|
|
echo
|
|
echo "ERROR: Cannot access SonarDesk product."
|
|
echo "HTTP: $HTTP_CODE"
|
|
echo
|
|
echo "$RESPONSE" | jq . 2>/dev/null || echo "$RESPONSE"
|
|
exit 1
|
|
fi
|
|
|
|
PRODUCT_NAME="$(echo "$RESPONSE" | jq -r '.data.name')"
|
|
|
|
echo " ✓ Product found: $PRODUCT_NAME"
|
|
echo " ✓ $PRODUCT_ID"
|
|
echo
|
|
|
|
# ------------------------------------------------------------
|
|
# Create price
|
|
# ------------------------------------------------------------
|
|
|
|
create_price() {
|
|
local variable="$1"
|
|
local name="$2"
|
|
local description="$3"
|
|
local amount="$4"
|
|
local interval="$5"
|
|
local display="$6"
|
|
|
|
echo "Creating: $name"
|
|
echo " $display"
|
|
|
|
PAYLOAD=$(jq -n \
|
|
--arg product "$PRODUCT_ID" \
|
|
--arg name "$name" \
|
|
--arg description "$description" \
|
|
--arg amount "$amount" \
|
|
--arg interval "$interval" \
|
|
'{
|
|
product_id: $product,
|
|
name: $name,
|
|
description: $description,
|
|
|
|
unit_price: {
|
|
amount: $amount,
|
|
currency_code: "GBP"
|
|
},
|
|
|
|
billing_cycle: {
|
|
interval: $interval,
|
|
frequency: 1
|
|
},
|
|
|
|
trial_period: {
|
|
interval: "day",
|
|
frequency: 7,
|
|
requires_payment_method: true
|
|
},
|
|
|
|
tax_mode: "account_setting",
|
|
|
|
quantity: {
|
|
minimum: 1,
|
|
maximum: 1
|
|
}
|
|
}')
|
|
|
|
echo
|
|
echo "Request:"
|
|
echo "$PAYLOAD" | jq .
|
|
echo
|
|
|
|
api_request POST "/prices" "$PAYLOAD"
|
|
|
|
if [[ "$HTTP_CODE" != "201" ]]; then
|
|
echo "============================================================"
|
|
echo " ERROR CREATING PRICE"
|
|
echo "============================================================"
|
|
echo
|
|
echo "Price: $name"
|
|
echo "HTTP: $HTTP_CODE"
|
|
echo
|
|
echo "Paddle response:"
|
|
echo
|
|
|
|
echo "$RESPONSE" | jq . 2>/dev/null || echo "$RESPONSE"
|
|
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
PRICE_ID="$(echo "$RESPONSE" | jq -r '.data.id')"
|
|
|
|
if [[ -z "$PRICE_ID" || "$PRICE_ID" == "null" ]]; then
|
|
echo "ERROR: Paddle returned no price ID."
|
|
echo "$RESPONSE" | jq .
|
|
exit 1
|
|
fi
|
|
|
|
printf -v "$variable" '%s' "$PRICE_ID"
|
|
|
|
echo " ✓ CREATED"
|
|
echo " ✓ $PRICE_ID"
|
|
echo
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# Create SonarDesk prices
|
|
# ------------------------------------------------------------
|
|
|
|
echo "============================================================"
|
|
echo " Creating SonarDesk Prices"
|
|
echo "============================================================"
|
|
echo
|
|
|
|
create_price \
|
|
PERSONAL_MONTHLY \
|
|
"Personal Monthly" \
|
|
"SonarDesk Personal - Monthly subscription" \
|
|
"299" \
|
|
"month" \
|
|
"£2.99/month"
|
|
|
|
create_price \
|
|
PERSONAL_ANNUAL \
|
|
"Personal Annual" \
|
|
"SonarDesk Personal - Annual subscription" \
|
|
"2499" \
|
|
"year" \
|
|
"£24.99/year"
|
|
|
|
create_price \
|
|
PROFESSIONAL_MONTHLY \
|
|
"Professional Monthly" \
|
|
"SonarDesk Professional - Monthly subscription" \
|
|
"499" \
|
|
"month" \
|
|
"£4.99/month"
|
|
|
|
create_price \
|
|
PROFESSIONAL_ANNUAL \
|
|
"Professional Annual" \
|
|
"SonarDesk Professional - Annual subscription" \
|
|
"4499" \
|
|
"year" \
|
|
"£44.99/year"
|
|
|
|
# ------------------------------------------------------------
|
|
# Generate Laravel configuration
|
|
# ------------------------------------------------------------
|
|
|
|
cat > "$OUTPUT_FILE" <<EOF
|
|
# ============================================================
|
|
# SonarDesk Paddle SANDBOX
|
|
# ============================================================
|
|
|
|
PADDLE_ENV=sandbox
|
|
|
|
PADDLE_PRODUCT_ID=${PRODUCT_ID}
|
|
|
|
PADDLE_PERSONAL_MONTHLY_PRICE_ID=${PERSONAL_MONTHLY}
|
|
PADDLE_PERSONAL_YEARLY_PRICE_ID=${PERSONAL_ANNUAL}
|
|
|
|
PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID=${PROFESSIONAL_MONTHLY}
|
|
PADDLE_PROFESSIONAL_YEARLY_PRICE_ID=${PROFESSIONAL_ANNUAL}
|
|
EOF
|
|
|
|
echo
|
|
echo "============================================================"
|
|
echo " SUCCESS"
|
|
echo "============================================================"
|
|
echo
|
|
echo "SonarDesk Paddle prices:"
|
|
echo
|
|
echo "Personal Monthly"
|
|
echo " £2.99/month"
|
|
echo " $PERSONAL_MONTHLY"
|
|
echo
|
|
echo "Personal Annual"
|
|
echo " £24.99/year"
|
|
echo " $PERSONAL_ANNUAL"
|
|
echo
|
|
echo "Professional Monthly"
|
|
echo " £4.99/month"
|
|
echo " $PROFESSIONAL_MONTHLY"
|
|
echo
|
|
echo "Professional Annual"
|
|
echo " £44.99/year"
|
|
echo " $PROFESSIONAL_ANNUAL"
|
|
echo
|
|
echo "Configuration:"
|
|
echo " $OUTPUT_FILE"
|
|
echo
|
|
echo "Now check:"
|
|
echo " Paddle Sandbox -> Catalog -> Products -> SonarDesk"
|
|
echo
|