Vai al contenuto

Iniziare

  1. Installa il pacchetto

    Terminal window
    npm i @capgo/capacitor-wechat
  2. Sincronizzazione con progetti nativi

    Terminal window
    npx cap sync

##Configurazione

Prima di utilizzare questo plugin, devi registrare la tua app sulla WeChat Open Platform per ottenere un ID app.

Aggiungi quanto segue al tuo Info.plist:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>weixinULAPI</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>weixin</string>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_WECHAT_APP_ID</string>
</array>
</dict>
</array>

Dovrai integrare WeChat SDK nel tuo progetto iOS. Aggiungi WeChat SDK al tuo Podfile o scaricalo dalla piattaforma aperta WeChat.

Aggiungi quanto segue al tuo AndroidManifest.xml:

<manifest>
<application>
<!-- WeChat callback activity -->
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>

Dovrai integrare WeChat SDK nel tuo progetto Android. Aggiungi la dipendenza WeChat SDK al tuo build.gradle o scaricalo dalla piattaforma aperta WeChat.

import { CapacitorWechat } from '@capgo/capacitor-wechat';
const checkWeChat = async () => {
const { installed } = await CapacitorWechat.isInstalled();
if (installed) {
console.log('WeChat is installed');
} else {
console.log('WeChat is not installed');
}
};
const loginWithWeChat = async () => {
try {
const { code, state } = await CapacitorWechat.auth({
scope: 'snsapi_userinfo', // or 'snsapi_login'
state: 'my_random_state'
});
// Send code to your backend to exchange for access token
const response = await fetch('https://yourapi.com/auth/wechat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code })
});
const { access_token, openid } = await response.json();
console.log('Logged in with WeChat:', openid);
} catch (error) {
console.error('WeChat auth failed:', error);
}
};
const shareText = async () => {
await CapacitorWechat.share({
scene: 0, // 0 = Chat, 1 = Moments, 2 = Favorite
type: 'text',
text: 'Hello from Capacitor WeChat!'
});
};
const shareLink = async () => {
await CapacitorWechat.share({
scene: 1, // Share to Moments
type: 'link',
title: 'Check out this awesome app!',
description: 'Built with Capacitor and WeChat SDK',
link: 'https://capacitorjs.com',
thumbUrl: 'https://capacitorjs.com/icon.png'
});
};
const shareImage = async () => {
await CapacitorWechat.share({
scene: 0,
type: 'image',
imageUrl: 'https://example.com/image.png', // or base64 data
thumbUrl: 'https://example.com/thumb.png'
});
};
const payWithWeChat = async () => {
// First, get payment parameters from your server
const paymentParams = await fetchPaymentParamsFromServer();
try {
await CapacitorWechat.sendPaymentRequest({
partnerId: paymentParams.partnerId,
prepayId: paymentParams.prepayId,
nonceStr: paymentParams.nonceStr,
timeStamp: paymentParams.timeStamp,
package: paymentParams.package, // Usually 'Sign=WXPay'
sign: paymentParams.sign
});
console.log('Payment successful!');
} catch (error) {
console.error('Payment failed:', error);
}
};
const openMiniProgram = async () => {
await CapacitorWechat.openMiniProgram({
username: 'gh_xxxxxxxxxxxxx', // Mini program original ID
path: 'pages/index/index', // Path within mini program
type: 0 // 0 = Release, 1 = Test, 2 = Preview
});
};

Controlla se l’app WeChat è installata sul dispositivo.

const result = await CapacitorWechat.isInstalled();
// Returns: { installed: boolean }

Autentica l’utente con WeChat OAuth.

interface WechatAuthOptions {
scope: string; // 'snsapi_userinfo' or 'snsapi_login'
state?: string; // Optional state parameter for CSRF protection
}
const result = await CapacitorWechat.auth(options);
// Returns: { code: string, state?: string }

Condividi contenuti su WeChat.

interface WechatShareOptions {
scene: number; // 0 = Session (chat), 1 = Timeline (moments), 2 = Favorite
type: 'text' | 'image' | 'link' | 'music' | 'video' | 'miniprogram';
text?: string; // For type 'text'
title?: string; // For type 'link', 'music', 'video', 'miniprogram'
description?: string; // For type 'link', 'music', 'video', 'miniprogram'
link?: string; // For type 'link'
imageUrl?: string; // Image URL or base64 data
thumbUrl?: string; // Thumbnail URL or base64 data
mediaUrl?: string; // For type 'music' or 'video'
miniProgramUsername?: string; // For type 'miniprogram'
miniProgramPath?: string; // For type 'miniprogram'
miniProgramType?: number; // For type 'miniprogram': 0 = Release, 1 = Test, 2 = Preview
miniProgramWebPageUrl?: string; // Fallback URL for type 'miniprogram'
}
await CapacitorWechat.share(options);

Invia richiesta di pagamento a WeChat Pay.

interface WechatPaymentOptions {
partnerId: string; // Merchant ID
prepayId: string; // Prepay ID from unified order API
nonceStr: string; // Random string
timeStamp: string; // Timestamp
package: string; // Usually 'Sign=WXPay'
sign: string; // Signature
}
await CapacitorWechat.sendPaymentRequest(options);

Apri il mini-programma WeChat.

interface WechatMiniProgramOptions {
username: string; // Mini-program username (original ID)
path?: string; // Path to open in mini-program
type?: number; // 0 = Release, 1 = Test, 2 = Preview
}
await CapacitorWechat.openMiniProgram(options);

Scegli la fattura da WeChat (per app aziendali).

interface WechatInvoiceOptions {
appId: string;
signType: string;
cardSign: string;
timeStamp: string;
nonceStr: string;
}
const result = await CapacitorWechat.chooseInvoice(options);
// Returns: { cards: string[] }

Ottieni la versione del plugin nativo.

const result = await CapacitorWechat.getPluginVersion();
// Returns: { version: string }
import { CapacitorWechat } from '@capgo/capacitor-wechat';
export class WeChatService {
async init() {
const { installed } = await CapacitorWechat.isInstalled();
if (!installed) {
throw new Error('WeChat is not installed');
}
}
async login() {
const { code } = await CapacitorWechat.auth({
scope: 'snsapi_userinfo',
state: Math.random().toString(36).substring(7)
});
// Exchange code for access token on your backend
const response = await fetch('/api/auth/wechat', {
method: 'POST',
body: JSON.stringify({ code })
});
return response.json();
}
async shareToChat(title: string, description: string, link: string, imageUrl: string) {
await CapacitorWechat.share({
scene: 0, // Chat
type: 'link',
title,
description,
link,
thumbUrl: imageUrl
});
}
async shareToMoments(title: string, description: string, link: string, imageUrl: string) {
await CapacitorWechat.share({
scene: 1, // Moments
type: 'link',
title,
description,
link,
thumbUrl: imageUrl
});
}
}
  1. Integrazione WeChat SDK: questo plugin fornisce l’interfaccia Capacitor, ma è necessario integrare WeChat ufficiale SDK nei tuoi progetti nativi.

  2. Registrazione dell’app: è necessario registrare la tua app sulla piattaforma aperta WeChat per ottenere un ID app.

  3. Collegamenti universali (iOS): Per iOS 13+, è necessario configurare Collegamenti universali per i callback di WeChat.

  4. Integrazione backend: le funzionalità di autenticazione e pagamento richiedono l’integrazione backend per scambiare codici con token e preparare i parametri di pagamento.

  5. Test: le funzionalità di WeChat richiedono test su dispositivi fisici: non funzioneranno nei simulatori.

  1. Controlla sempre se WeChat è installato prima di tentare di utilizzare le funzionalità.
  2. Gestisci gli errori con garbo con i blocchi try-catch.
  3. Utilizza il parametro di stato nelle richieste di autenticazione per la protezione CSRF.
  4. Convalida le risposte ai pagamenti sul tuo backend prima di concedere l’accesso.
  5. Comprimi le immagini prima di condividerle per ridurre l’utilizzo dei dati.
  • Richiede iOS 10.0+
  • Utilizza WeChat ufficiale SDK per iOS
  • Richiede la configurazione dei collegamenti universali per iOS 13+### Android
  • Richiede Android 5.0 (API 21)+
  • Utilizza WeChat ufficiale SDK per Android
  • Richiede la configurazione di WXEntryActivity
  • Non supportato sulla piattaforma web