关于接入react-native 接入微信支付功能记录(原生同理)

本文介绍如何在React Native项目中集成微信支付功能,包括配置步骤、关键代码实现及调用流程。

1、如何申请微信支付我就不详细多讲解了网上太多了 并且微信比支付宝麻烦太多太多了
2、进入正题我们进入我们的项目中进入android/app/build.gradle文件中在dependencies中添加引入

dependencies{
...
compile "com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+"
.....
}

3、在包下创建wxapi报名 (好像是必须起这个名字呢)在包下创建文件weixinEntryActivity.java

package 包名

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
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;

public class weixinEntryActivity extends Activity implements IWXAPIEventHandler {
  
    private static final String TAG = "weixinEntryActivityextends";
    private IWXAPI api;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      api = WXAPIFactory.createWXAPI(this, WxpayModule.APP_ID);
        api.handleIntent(getIntent(), this);
    }

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

  @Override
  public void onReq(BaseReq req) {
  }

  @Override
  public void onResp(BaseResp resp) {
    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
      WritableMap map = Arguments.createMap();
      map.putInt("errCode", resp.errCode);
      WxpayModule.promise.resolve(map);
      finish();
    }
  }
}

4、在包下创建weixinpayModule.java

package 包名;

import com.facebook.react.bridge.Promise;
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.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

class weixinpayModule extends ReactContextBaseJavaModule {

  private IWXAPI api;
  static String APP_ID = "";
  static Promise promise = null;

  weixinpayModule(ReactApplicationContext reactContext) {
    super(reactContext);
    api = WXAPIFactory.createWXAPI(reactContext, null);
  }

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

  @ReactMethod
  public void registerApp(String APP_ID) { // 向微信注册
    weixinpayModule.APP_ID = APP_ID;
    api.registerApp(APP_ID);
  }

  @ReactMethod
  public void pay(final ReadableMap order, Promise promise) {
    weixinpayModule.promise = promise;
    PayReq request = new PayReq();
    request.appId = order.getString("appid");
    request.partnerId = order.getString("partnerid");
    request.prepayId= order.getString("prepayid");
    request.packageValue = order.getString("package");
    request.nonceStr= order.getString("noncestr");
    request.timeStamp= order.getInt("timestamp")+"";
    request.sign= order.getString("sign");
    api.sendReq(request);
  }

  @ReactMethod
  public void isSupported(Promise promise) { // 判断是否支持调用微信SDK
    boolean isSupported = api.isWXAppInstalled();
    promise.resolve(isSupported);
  }

}

5、创建weixinpayPackage.java

package 包名;

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 weixinpayPackage 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 weixinpayModule(reactContext));
    return modules;
  }
}

6、在我们MainApplication.java 中记得引用注册,在getPackages() 方法里面添加到list中即可。
7、创建wxpay.js 此时在react-native的页面里了 上面的在android 里面的包里

import { NativeModules } from 'react-native';
export default NativeModules.Wxpay;

8、完成之后在我们启动的时候需要先注册

import wxpayfrom '地址';
Wxpay.registerApp("234234234234"); // 此为appid  微信申请的

9、使用

 //判断是否有微信
        let isSupported =await Wxpay.isSupported();
        console.log(isSupported)
        //支付
        let ret =await Wxpay.pay({
            appid:'123123123',
            partnerid: 'xxxxxx',  // 商家向财付通申请的商家id
            prepayid: 'xxxxxx',   // 预支付订单
            noncestr:'xxxxxx',   // 随机串,防重发
            timestamp: 1641713602,  // 时间戳,防重发.
            package: 'Sign=WXPay',    // 商家根据财付通文档填写的数据和签名
            sign: 'xxxxxxxxx'       // 商家根据微信开放平台文档对数据做的签名
            })
            console.log(ret)

10、终于结束了。。。。

要在项目中使用 react-native-wechat-lib 集成微信支付,可参考以下步骤及编写方法: ### 1. 安装依赖 确保项目中安装了合适版本的 react-native-wechat-lib,可参考示例版本信息:“react-native-wechat-lib”: “^1.1.26” [^3]。 使用以下命令进行安装: ```bash npm install react-native-wechat-lib@^1.1.26 ``` 或 ```bash yarn add react-native-wechat-lib@^1.1.26 ``` ### 2. 配置项目 #### iOS 配置 - 需确保 iOS SDK 版本为 1.8.7.1,Xcode 版本为 V13.0 [^3]。 - 按照微信官方文档完成应用在微信开放平台的注册,获取 AppID 等必要信息。 - 在项目的 Info.plist 文件中添加 URL Schemes,格式为微信的 AppID。 #### Android 配置 确保 Android SDK 版本为 5.5.6 [^3]。同样在微信开放平台完成应用注册,获取 AppID。在 AndroidManifest.xml 文件中配置相关信息。 ### 3. 初始化 SDK 在项目代码中初始化 react-native-wechat-lib,示例代码如下: ```javascript import Wechat from 'react-native-wechat-lib'; // 初始化微信 SDK Wechat.registerApp('your_wechat_app_id'); ``` 将 `your_wechat_app_id` 替换为在微信开放平台注册应用时获取的 AppID。 ### 4. 发起微信支付请求 当用户触发支付操作时,调用相关 API 发起微信支付请求。 ```javascript // 假设从服务器获取到的支付参数 const paymentParams = { partnerId: 'your_partner_id', prepayId: 'your_prepay_id', package: 'Sign=WXPay', nonceStr: 'your_nonce_str', timeStamp: 'your_timestamp', sign: 'your_sign' }; Wechat.pay(paymentParams) .then(() => { console.log('支付请求成功发出'); }) .catch((error) => { console.error('支付请求失败:', error); }); ``` 上述代码中的参数需从服务器获取,服务器根据业务逻辑和微信支付 API 生成正确的支付参数。 ### 5. 处理支付结果 在合适的位置监听支付结果回调。 ```javascript Wechat.addListener('PayResp', (resp) => { if (resp.errCode === 0) { console.log('支付成功'); } else { console.error('支付失败,错误码:', resp.errCode, '错误信息:', resp.errStr); } }); ``` ### 6. 移除监听器 在组件卸载时,移除事件监听器,避免内存泄漏。 ```javascript componentWillUnmount() { Wechat.removeAllListeners('PayResp'); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值