基于react native的android原生微信客服,微信支付以及判断是否安装微信
- 引入SDK(Android Studio 环境下)
- 创建wxapi/WXPayEntryActivity.java(用于接收微信响应返回信息)
- CustomerServiceModule.java
- CustomerServicePackage.java
- MainApplication.java(引入CustomerServicePackage包)
- wxCustomer.js
- 使用案例
微信openSDK
引入SDK(Android Studio 环境下)
请按照android接入指南
创建wxapi/WXPayEntryActivity.java(用于接收微信响应返回信息)
package com.xxxx.wxapi;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tencent.mm.opensdk.modelpay.PayResp;public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {private static final String APP_ID="wxxxxxxxx";public ReactApplicationContext reactContext;private IWXAPI api;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this,APP_ID);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}public void setReactContext(ReactApplicationContext reactContext) {this.reactContext = reactContext;}// 处理微信请求@Overridepublic void onReq(BaseReq req) {}// 处理微信回调@Overridepublic void onResp(BaseResp baseResp) {WritableMap map = Arguments.createMap();map.putInt("errCode", baseResp.errCode);map.putString("errStr", baseResp.errStr);map.putString("openId", baseResp.openId);map.putString("transaction", baseResp.transaction);if (baseResp instanceof PayResp) {//支付返回值PayResp resp = (PayResp) (baseResp);map.putString("type", "PayReq.Resp");map.putString("returnKey", resp.returnKey);}finish();}}
CustomerServiceModule.java
package com.xxxx;import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReadableMap;import com.tencent.mm.opensdk.modelbiz.WXOpenCustomerServiceChat;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.windoent.bandaimatch.wxapi.WXEntryActivity;public class CustomerServiceModule extends ReactContextBaseJavaModule{private final static String NOT_REGISTERED = "registerApp required.";private static final String APP_ID="wxxxxxxxx";private static ReactApplicationContext reactContext;private IWXAPI api;public CustomerServiceModule(ReactApplicationContext context){super(context);WXEntryActivity.reactContext=context;reactContext=context;api=WXAPIFactory.createWXAPI(context,APP_ID,true);}@Overridepublic String getName() {return "CustomerServiceChat";}// 判断是否安装微信@ReactMethodpublic void isWeChatInstalled(Promise promise) {if (api == null) {promise.resolve(NOT_REGISTERED);return;}String result="no";boolean isInstalled = api.isWXAppInstalled();if(isInstalled){result="ok";}else{result="no";}promise.resolve(result);}//微信客服@ReactMethodpublic void open(String corpId, String kfUrl, Promise promise) {try{if (api == null) {promise.resolve(NOT_REGISTERED);return;}// 将应用的appId注册到微信api.registerApp(APP_ID);// open customer service logicWXOpenCustomerServiceChat.Req req = new WXOpenCustomerServiceChat.Req();req.corpId = corpId;req.url = kfUrl;api.sendReq(req);}catch(Exception e){promise.resolve("Error");}}// 微信支付@ReactMethodpublic void pay(ReadableMap data, Promise promise) {// 将应用的appId注册到微信api.registerApp(APP_ID);PayReq payReq = new PayReq();if (data.hasKey("partnerId")) {payReq.partnerId = data.getString("partnerId");}if (data.hasKey("prepayId")) {payReq.prepayId = data.getString("prepayId");}if (data.hasKey("nonceStr")) {payReq.nonceStr = data.getString("nonceStr");}if (data.hasKey("timeStamp")) {payReq.timeStamp = data.getString("timeStamp");}if (data.hasKey("sign")) {payReq.sign = data.getString("sign");}if (data.hasKey("package")) {payReq.packageValue = data.getString("package");}payReq.appId = APP_ID;api.sendReq(payReq);}}
CustomerServicePackage.java
package com.xxxx;import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class CustomerServicePackage implements ReactPackage {@Overridepublic List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {return Collections.emptyList();}@Overridepublic List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {List<NativeModule> modules = new ArrayList<>();modules.add(new CustomerServiceModule(reactContext));return modules;}}
MainApplication.java(引入CustomerServicePackage包)
package com.xxxx;import android.app.Application;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactNativeHost;
import com.facebook.soloader.SoLoader;
import java.util.List;import com.windoent.bandaimatch.CustomerServicePackage;public class MainApplication extends Application implements ReactApplication {private final ReactNativeHost mReactNativeHost =new DefaultReactNativeHost(this) {@Overridepublic boolean getUseDeveloperSupport() {return BuildConfig.DEBUG;}@Overrideprotected List<ReactPackage> getPackages() {@SuppressWarnings("UnnecessaryLocalVariable")List<ReactPackage> packages = new PackageList(this).getPackages();// Packages that cannot be autolinked yet can be added manually here, for example:// packages.add(new MyReactNativePackage());packages.add(new CustomerServicePackage());return packages;}@Overrideprotected String getJSMainModuleName() {return "index";}@Overrideprotected boolean isNewArchEnabled() {return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;}@Overrideprotected Boolean isHermesEnabled() {return BuildConfig.IS_HERMES_ENABLED;}};@Overridepublic ReactNativeHost getReactNativeHost() {return mReactNativeHost;}@Overridepublic void onCreate() {super.onCreate();SoLoader.init(this, /* native exopackage */ false);if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {// If you opted-in for the New Architecture, we load the native entry point for this app.DefaultNewArchitectureEntryPoint.load();}//ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());}
}
wxCustomer.js
import {NativeModules} from 'react-native';export default NativeModules.CustomerServiceChat;
使用案例
import wxCustomer from '../../common/js/wxCustomer';是否安装微信app
wxCustomer.isWeChatInstalled()//微信客服
wxCustomer.open('ww8259a7xxxx','https://work.weixin.qq.com/kfid/xxxxx',);//微信支付
wxCustomer.pay({partnerId: payInfo?.partnerid,prepayId: payInfo?.prepayid,nonceStr: payInfo?.noncestr,timeStamp: payInfo?.timestamp,package: payInfo?.package,sign: payInfo?.sign,});