Skip to content

Technical Plugin PayPalYPT

Daniel Neto edited this page Oct 29, 2026 · 1 revision

Technical: PayPalYPT plugin

Manages PayPal checkout, recurring plans and provider-verified reconciliation.

Audience: developers, advanced administrators and AI-assisted diagnosis. Plugin catalog.

Source baseline

  • Review date: 2026-10-29. Method: static source analysis; runtime/provider behavior was not exercised.
  • Code ownership: AVideo Streamer repository.
  • Reported version: 3.0.
  • Source revision: 7d48f2dfc0289236718a3f9fba7c5ffecff4a37f.
  • Entry class file: PayPalYPT.php.

Confirm the installed plugin version independently of the Streamer version. Configuration defaults below are not a dump of this installation's saved settings.

Behavior and operational checks

Browser return, webhook/IPN and status polling converge on checkout reconciliation. Payment state is re-read from the provider. Agreement approval alone does not establish a completed payment. Wallet credit and plan/rental fulfillment are separate outcomes.

Dependencies

Plugin Required by declaration Source reason
YPTWallet Required Credits confirmed PayPal payments to the user wallet balance

Literal runtime plugin references: FansSubscriptions, PayPerView, PayPerViewLive, Subscription, YPTWallet. These calls do not mean every referenced plugin is mandatory.

Hook integration

Override Implementation
getTags() PayPalYPT.php:47
updateScript() PayPalYPT.php:94
getMyAccount($users_id) PayPalYPT.php:860
getWalletConfigurationHTML($users_id, $wallet, $walletDataObject) PayPalYPT.php:1014
getPluginMenu() PayPalYPT.php:1031

Configuration assignments

These are direct assignments inside getEmptyDataObject(), not evaluated effective defaults. Stored plugins.object_data, globals, structured values and conditional branches may alter runtime behavior. Private/default credential values are omitted.

Field Literal default or expression type Literal source label/help Evidence
ClientID Private setting; value omitted REST app Client ID: From your own app in developer.paypal.com (Sandbox or Live, matching disableSandbox). The default value is a shared public sandbox app: replace it. source
ClientSecret Private setting; value omitted REST app secret: Secret of the same PayPal app. Never post it in issues. source
subscriptionButtonLabel "Subscribe With PayPal" — source
paymentButtonLabel "Pay With PayPal" — source
disableSandbox false Live payments: Unchecked: PayPal Sandbox (test money). Checked: Live (real payments). Use credentials from the same environment. source
webhookId "" Webhook ID: Filled by Check configuration. Used to verify the signature of webhook deliveries; copy it from your PayPal app if you created the webhook manually. source

Files and request surface

This inventory distinguishes implementation files from an API specification. Includes, templates, callbacks and CLI workers are not interchangeable HTTP endpoints. Request-field names below are direct source references, not a complete schema or permission declaration.

File Source role Direct request fields observed
Objects/PayPalConfiguration.php class/helper implementation —
Objects/PayPalPaymentProcessor.php class/helper implementation —
Objects/PayPalYPT_checkout.php class/helper implementation —
Objects/PayPalYPT_log.php class/helper implementation —
PayPalAgreementCancel.json.php JSON entry point; inspect caller and guard agreement_id
PayPalAgreementStatus.json.php JSON entry point; inspect caller and guard agreement_id
PayPalClient.php class/helper implementation —
PayPalYPT.php plugin entry class PayerID, paymentId, plans_id, token
View/PayPalYPT_log/add.json.php JSON entry point; inspect caller and guard agreement_id, id, json, recurring_payment_id, token, users_id, value
View/PayPalYPT_log/delete.json.php JSON entry point; inspect caller and guard id
View/PayPalYPT_log/index.php PHP page/include/worker; inspect caller —
View/PayPalYPT_log/index_body.php PHP page/include/worker; inspect caller —
View/PayPalYPT_log/index_head.php PHP page/include/worker; inspect caller —
View/PayPalYPT_log/list.json.php JSON entry point; inspect caller and guard draw
View/editor.php PHP page/include/worker; inspect caller —
agreementCancel.json.php JSON entry point; inspect caller and guard agreement
bootstrap.php PHP page/include/worker; inspect caller —
checkout.php PHP page/include/worker; inspect caller invoice
checkoutStatus.json.php JSON entry point; inspect caller and guard invoice
configuration.json.php JSON entry point; inspect caller and guard action
configuration.php PHP page/include/worker; inspect caller —
getWalletConfigurationHTML.php PHP page/include/worker; inspect caller —
install/install.sql schema/migration SQL —
install/updateV3.0.sql schema/migration SQL —
ipn.php PHP page/include/worker; inspect caller amount, currency_code, initial_payment_amount, initial_payment_status, initial_payment_txn_id, invoice, ipn_track_id, mc_currency, mc_gross, payment_status, recurring_payment_id, txn_id, txn_type, verify_sign
ipnV2.php PHP page/include/worker; inspect caller amount, currency_code, json, mc_currency, mc_gross, payment_status, success, token, txn_id, txn_type, verify_sign
payOutReceiverEmailForm.php PHP page/include/worker; inspect caller —
payout.php PHP page/include/worker; inspect caller payout_batch
resend.php PHP page/include/worker; inspect caller event_id
savePayPalReceiverEmail.json.php JSON entry point; inspect caller and guard PayPalReceiverEmail
subscriptions_list.php PHP page/include/worker; inspect caller —
test.php PHP page/include/worker; inspect caller —
webhook.php PHP page/include/worker; inspect caller —

Data and migrations

Tables named in available CREATE TABLE statements: PayPalYPT_checkout, PayPalYPT_log. Apply installation/update behavior through the owning plugin; this reference is not a script for running historical migrations manually.

Main-file named symbols

Visibility and implementation semantics must be checked in source. Nonempty string defaults are represented as . This is a symbol reference, not a stable public API promise.

Function or method Source
getPluginDependencies() 41
getTags() 47
getDescription() 55
getName() 63
getUUID() 68
getPluginVersion() 73
getEmptyDataObject() 78
updateScript() 94
getEnvironment($settings = null) 100
getApiBaseURL($settings = null) 106
getClientHash($settings = null) 112
isSharedDemoApp($settings = null) 118
getSdkConfig($settings = null) 124
getApiContext($requestId = null, $settings = null) 139
restCall($method, $path, $payload = '', $apiContext = null) 151
describeApiError($exception) 161
setUpPayment($invoiceNumber, $redirect_url, $cancel_url, $total = '<string>', $currency = '<string>', $description = "") 175
getPlanDetails($plan_id) 220
executePayment() 233
createBillingPlan($redirect_url, $cancel_url, $total = '<string>', $currency = '<string>', $frequency = '<string>', $interval = 1, $name = '<string>', $plans_id = 0) 283
getPlanId() 379
setUpSubscription($invoiceNumber, $redirect_url, $cancel_url, $total = '<string>', $currency = '<string>', $frequency = '<string>', $interval = 1, $name = '<string>') 398
setUpSubscriptionV2($total = '<string>', $currency = '<string>', $frequency = '<string>', $interval = 1, $name = ''<string>'', $trialDays = 0) 465
createBillingPlanV2($total = '<string>', $currency = '<string>', $frequency = '<string>', $interval = 1, $name = ''<string>'', $trialDays = 0) 517
executeBillingAgreement() 616
getBillingAgreement($agreement_id) 637
cancelAgreement($agreement_id) 644
execute() 664
getAmountFromPayment($payment) 677
sendToPayPal($invoiceNumber, $redirect_url, $cancel_url, $total, $currency) 705
updateBillingPlan($plan_id, $total = '<string>', $currency = '<string>', $interval = 1, $name = '<string>') 717
getRawIPN() 761
getIPNVerificationURL($settings = null) 773
IPNcheck() 779
setUserReceiverEmail($users_id, $email) 846
getUserReceiverEmail($users_id) 853
getMyAccount($users_id) 860
WalletPayout($users_id_to_be_paid, $value) 872
Payout($receiver_email, $value, $currency = '<string>', $note = ''<string>'') 926
getPayoutInfo($payout_batch_id) 993
getWalletConfigurationHTML($users_id, $wallet, $walletDataObject) 1014
getPluginMenu() 1031
isTokenUsed($token) 1038
isRecurringPaymentIdUsed($recurring_payment_id) 1044
getAllLogsFromUser($users_id) 1050
getOrCreateWebhook() 1060
getWebhook($apiContext = null) 1072
createWebhook() 1086
deleteAllWebhooks() 1093
getWebhookIdForValidation() 1100
getSignatureHeaders() 1111
validateWebhook() 1128
getWebhookURL() 1172
resendWebhook($event_id) 1180
recordDelivery($channel, $eventType) 1197
getRecordedDelivery($channel, $settings = null) 1218
deliveryCacheName($settings, $channel) 1231
getIPNURL() 1238
createCheckoutPayment(array $checkout, $returnUrl, $cancelUrl) 1249
isPayPalApprovalURL($url) 1286
cleanReceiptText($text, $length) 1292
normalizePayment(array $data) 1299
assertPaymentMatchesCheckout(array $payment, array $checkout) 1326
assertSameApp(array $checkout) 1336
errorName($exception) 1343
reconcileCheckout(array $checkout, $source) 1356
getApprovalToken($approvalURL) 1445
getAgreementPayments($agreementId, $since) 1452
reconcileSubscriptionCheckout(array $checkout, $source) 1470
startOneTimeCheckout($usersId, array $request) 1559
startSubscriptionCheckout($usersId, $plansId) 1680
getCheckoutReturnBase() 1740
getCheckoutPageURL($invoice) 1746
getPublicCheckoutStatus(array $checkout) 1753

Supporting PHP declarations

These symbols are grouped by source file; inspect the class declaration and visibility before calling them.

Objects/PayPalConfiguration.php

Declared classes: PayPalConfiguration, PayPalConfigurationHttpException.

Named symbol Source
__construct($settings, $webhookURL, ?callable $http = null) 27
curl($method, $url, array $headers, $body) 34
environment() 61
apiBase() 66
finding(&$report, $id, $label, $status, $message) 71
credentialsPresent() 79
isSharedDemoApp() 84
describeStatus($status) 90
authenticate(&$report) 108
api($method, $path, $body = null) 141
hasScope($pattern) 152
checkScopes(&$report, $features) 163
probe(&$report, $label, $path) 192
listWebhooks() 209
matching(array $webhooks) 218
eventNames($webhook) 225
missingEvents($webhook) 232
isPublicHttpsURL() 238
inspectWebhook(&$report) 250
check($features = []) 285
configure(callable $save) 364
saveWebhookId(callable $save, $id, $message) 429
__construct($status) 449

Objects/PayPalPaymentProcessor.php

Declared classes: PayPalPaymentProcessor, PayPalPaymentMismatchException.

Named symbol Source
withoutBrowserOrigin(callable $work) 16
cents($value) 33
fulfillCheckoutSale($wallet, array $checkout, array $sale, $source) 43
processSubscriptionSale($wallet, $users_id, $plans_id, $agreementId, array $paymentIds, $amount, $description, $json, array $logFields = [], ?callable $legacyCheck = null) 103
findAgreementOwner($agreementId) 152
logContext($checkout, $sale, $source) 167

Objects/PayPalYPT_checkout.php

Declared classes: PayPalYPT_checkout, PayPalCheckoutBusyException, PayPalCheckoutRefused.

Named symbol Source
isInstalled() 29
newInvoiceNumber() 34
isValidInvoiceNumber($invoice) 39
isValidProviderId($id) 45
selectionHash($users_id, $purpose, $selection, $amount, $currency, $environment, $clientHash) 50
formatAmount($amount) 56
create($users_id, $purpose, array $selection, $amount, $currency, $environment, $clientHash, $selectionHash = null) 61
update($id, array $fields) 83
getOne($where, $formats, $values) 114
decode($row) 125
getById($id) 131
getByInvoice($invoice) 136
getByPaymentId($paymentId) 141
getByAgreementId($agreementId) 146
getReusable($users_id, $selectionHash) 153
getUnfinishedPaid($users_id, $selectionHash) 160
lockName($row) 166
withLock($name, callable $work, $timeout = 10) 173

Objects/PayPalYPT_log.php

Declared classes: PayPalYPT_log.

Named symbol Source
getSearchFieldsNames() 15
getTableName() 20
getAllUsers() 25
setId($id) 46
setAgreement_id($agreement_id) 51
setUsers_id($users_id) 56
setJson($json) 61
setRecurring_payment_id($recurring_payment_id) 69
setValue($value) 74
setToken($token) 79
getId() 84
getAgreement_id() 89
getUsers_id() 94
getJson() 99
getRecurring_payment_id() 104
getValue() 109
getToken() 114
getFromToken($token) 119
getFromRecurringPaymentId($recurring_payment_id) 135
getAllFromUser($users_id) 151
save() 174

PayPalClient.php

Declared classes: PayPalClient.

Named symbol Source
client() 16
environment() 26

Diagnostics and validation

  1. Check the installed/enabled version and the dependencies/settings above.
  2. Identify the actual failing page, request, callback or worker and correlate its timestamp with the AVideo log.
  3. Follow the linked method and caller. Check business-state changes and output artifacts as well as HTTP status.
  4. Reproduce the relevant workflow in a test environment. External provider, Encoder, live-server, storage, payment and authenticated flows require their real integrations.

Shared diagnostic workflow. This page is not a security audit or a claim of end-to-end validation.

Clone this wiki locally