# 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" < Catalog -> Products -> SonarDesk" echo