1、根据 京东支付Android接入说明文档 集成sdk依赖的jar包,配置相关的内容(主要根据文档一步一步配置就行,这里就不细说了,本章主要是关于使用RN调用sdk)
2、在../android/app/src/java 下面创建一个类实现接口 ReactPackage 包管理器,并把上面创建的类加到原生模块(NativeModule)列表中
JDPayPackage.java
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 JDPayPackage 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 JDPayModule(reactContext));
return modules;
}
}
JDPayModule.java
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.BaseActivityEventListener;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.Callback;
import com.jdpaysdk.author.Constants;
import com.jdpaysdk.author.JDPayAuthor;
public class JDPayModule extends ReactContextBaseJavaModule{
private static Activity ma;
private static Callback callback;
public static void initSocialSDK(Activity activity){
ma = activity;
}
public JDPayModule(ReactApplicationContext reactContext) {
super(reactContext);
reactContext.addActivityEventListener(mActivityEventListener);
}
private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {
@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
if(data != null){
if (Constants.PAY_RESPONSE_CODE == resultCode) {//返回信息接收
String result = data.getStringExtra(JDPayAuthor.JDPAY_RESULT);
Log.d("JD_PAY", "支付结果:" + result);
callback.invoke(result);
}
}
}
};
@Override
public String getName() {
return "JDPayModule";
}
@ReactMethod
public void addEvent(ReadableMap payParams, Callback returnCallback) {
Log.d("JD_PAY", "入参:" + payParams.toString());
JDPayAuthor jdPayAuthor = new JDPayAuthor();
String extraInfo = "";//json数据格式,
jdPayAuthor.author(ma, payParams.getString("orderId"), payParams.getString("merchant"), payParams.getString("appId"), payParams.getString("signData"), extraInfo);
callback = returnCallback;
}
}
3、MainActivity里初始化一个页面容器
4、将创建的包管理器添加到 ReactPackage 列表中(getPackages 方法)
5、唤起京东支付 (jdpay接口需要生成一个京东订单,返回商户id、订单id和京东支付MD5的密钥)
MD5的密钥需要通过MD5进行加密生产签名
const { code, context, message } = await webapi.jdpay(tid);
if (code == config.SUCCESS_CODE) {
const text =
'merchant=' +
context.merchant +
'&orderId=' +
context.orderId +
'&key=' +
Const.MD5_KET;
const signData = MD5.hex_md5(text).toLowerCase();
const payRequest = {
orderId: context.orderId,
merchant: context.merchant,
appId: Const.APP_ID,
signData: signData
};
let JDPayModule;
if (Platform.OS === 'Android') {
JDPayModule = NativeModules.JDPayModule;
JDPayModule.addEvent(payRequest, (result) => {
console.log('result====>', result);
if (JSON.parse(result).payStatus == 'JDP_PAY_SUCCESS') {
msg.emit('router: goToNext', {
routeName: 'PaySuccess',
tid: tid,
payType: 'online'
});
}
});
}
}