基于react native的android原生微信客服,微信支付以及判断是否安装微信


微信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;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    	api = WXAPIFactory.createWXAPI(this,APP_ID);
        api.handleIntent(getIntent(), this);
    }

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		setIntent(intent);
        api.handleIntent(intent, this);
	}

    public void setReactContext(ReactApplicationContext reactContext) {
        this.reactContext = reactContext;
    }

    // 处理微信请求
	@Override
	public void onReq(BaseReq req) {

	}

    // 处理微信回调
    @Override
	public 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);
    }

    @Override
    public String getName() {
        return "CustomerServiceChat";
    }

    // 判断是否安装微信
    @ReactMethod
    public 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);
        
    }

    //微信客服
    @ReactMethod
    public 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 logic
            WXOpenCustomerServiceChat.Req req = new WXOpenCustomerServiceChat.Req();

            req.corpId = corpId;
            req.url = kfUrl;
            api.sendReq(req);
        }catch(Exception e){
            promise.resolve("Error");
        }
    }

    // 微信支付
    @ReactMethod
    public 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 {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public 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) {
        @Override
        public boolean getUseDeveloperSupport() {
          return BuildConfig.DEBUG;
        }

        @Override
        protected 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;
        }

        @Override
        protected String getJSMainModuleName() {
          return "index";
        }

        @Override
        protected boolean isNewArchEnabled() {
          return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
        }

        @Override
        protected Boolean isHermesEnabled() {
          return BuildConfig.IS_HERMES_ENABLED;
        }
      };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public 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,
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值