PHP code example of lemoba / mobile-monetization
1. Go to this page and download the library: Download lemoba/mobile-monetization library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lemoba / mobile-monetization example snippets
use Illuminate\Support\Facades\Route;
use Lemoba\MobileMonetization\Facades\MobileMonetization;
Route::post('/auth/apple', function () {
$data = request()->validate([
'identity_token' => ['
// config/mobile-monetization.php
'cache' => [
'store' => env('MOBILE_MONETIZATION_CACHE_STORE', 'redis'),
'key_prefix' => env('MOBILE_MONETIZATION_CACHE_PREFIX', 'mobile_monetization'),
'jwks_ttl' => 3600,
'oauth_token_ttl' => 3300,
],
use Lemoba\MobileMonetization\Facades\MobileMonetization;
$identity = MobileMonetization::verifyAppleIdentityToken($identityToken, $nonce);
use Lemoba\MobileMonetization\Facades\MobileMonetization;
$identity = MobileMonetization::verifyGoogleIdToken($idToken, $nonce);
[
'provider' => 'apple',
'provider_user_id' => '...',
'email' => '...',
'email_verified' => true,
'claims' => [],
]
use Lemoba\MobileMonetization\Facades\MobileMonetization;
$purchase = MobileMonetization::verifyAppleTransactionId($transactionId);
// 或者客户端已拿到 signedTransactionInfo:
$purchase = MobileMonetization::verifyAppleSignedTransaction($signedTransactionInfo);
use Lemoba\MobileMonetization\Facades\MobileMonetization;
$purchase = MobileMonetization::verifyGoogleProduct($productId, $purchaseToken);
if ($purchase->valid) {
// 调用方先按 transaction_id 做唯一幂等,再发金币。
MobileMonetization::acknowledgeGoogleProduct($productId, $purchaseToken);
MobileMonetization::consumeGoogleProduct($productId, $purchaseToken);
}
$purchase = MobileMonetization::verifyGoogleSubscription($productId, $purchaseToken);
if ($purchase->active()) {
// 调用方按 original_transaction_id 或 transaction_id 更新自己的会员到期时间。
}
$purchase->toArray();
[
'platform' => 'ios|android',
'product_id' => 'coins_60',
'transaction_id' => '...',
'original_transaction_id' => '...',
'type' => 'consumable|subscription',
'valid' => true,
'active' => true,
'consumable' => true,
'purchased_at_ms' => 1710000000000,
'expires_at_ms' => null,
'raw' => [],
]
if ($purchase->valid && $purchase->consumable) {
// 1. 用 transaction_id 建唯一索引或幂等锁。
// 2. 根据 product_id 查自己的金币配置。
// 3. 写订单、写金币流水、增加余额。
}
if ($purchase->active() && $purchase->type === 'subscription') {
// 1. 用 original_transaction_id 关联订阅。
// 2. 用 expires_at_ms 更新 VIP 到期时间。
}
use Illuminate\Http\Request;
use Lemoba\MobileMonetization\Facades\MobileMonetization;
public function reward(Request $request)
{
$reward = MobileMonetization::verifyLevelPlayRewardCallback($request);
// 调用方业务逻辑:
// 1. 用 event_id 做唯一幂等,event_id 对应 LevelPlay eventId。
// 2. 用 user_id/app_user_id 或 dynamic_user_id 映射自己的用户。
// 3. 用 order_id 关联前端传入的自定义订单号(如果配置了 customParameters)。
// 4. 根据 reward_amount 或自己的广告奖励配置给金币。
// 5. 写金币流水、余额变化、任务记录等。
return response(MobileMonetization::levelPlayOkResponse($reward['event_id']), 200)
->header('Content-Type', 'text/plain');
}
$reward = MobileMonetization::verifyLevelPlayRewardCallback($request, dev: true);
[
'event_id' => '...',
'user_id' => '...',
'app_user_id' => '...',
'dynamic_user_id' => '...',
'reward_item' => 'coins',
'reward_amount' => 10,
'rewards' => '10',
'country' => 'SG',
'publisher_sub_id' => '0',
'custom_parameters' => [
'order_id' => 'ORD-20260429-001',
],
'order_id' => 'ORD-20260429-001',
'ad_unit' => '...',
'placement' => '...',
'network' => '...',
'timestamp' => 1710000000,
'raw' => [],
]
'fcm' => [
'android' => [
'project_id' => env('FCM_ANDROID_PROJECT_ID'),
'service_account_json_path' => env('FCM_ANDROID_SERVICE_ACCOUNT_JSON_PATH'),
],
'ios' => [
'project_id' => env('FCM_IOS_PROJECT_ID'),
'service_account_json_path' => env('FCM_IOS_SERVICE_ACCOUNT_JSON_PATH'),
],
],
use Lemoba\MobileMonetization\Facades\MobileMonetization;
$message = MobileMonetization::sendFcmToToken(
platform: 'ios',
token: $deviceToken,
title: 'VIP 到期提醒',
body: '你的会员即将到期',
data: [
'type' => 'vip_expiring',
'user_id' => (string) $userId,
],
options: [
'apns' => [
'payload' => [
'aps' => [
'sound' => 'default',
],
],
],
]
);
$message->toArray();
$message = MobileMonetization::sendFcmToToken(
platform: 'android',
token: $deviceToken,
title: '金币到账',
body: '看广告奖励已发放',
data: [
'type' => 'coins_granted',
'amount' => '10',
],
options: [
'android' => [
'priority' => 'HIGH',
],
]
);
$message = MobileMonetization::sendFcmToTopic(
platform: 'android',
topic: 'vip_users',
title: '新剧上线',
body: '会员可抢先观看'
);
bash
php artisan vendor:publish --tag=mobile-monetization-config
text
config/mobile-monetization.php # Redis cache store、cache key 前缀、TTL
config/mobile-auth.php # Apple / Google 登录
config/mobile-payments.php # App Store / Google Play 支付
config/mobile-ads.php # LevelPlay 广告
config/mobile-push.php # FCM 推送,Android/iOS 两套 Firebase 文件