react native android接入支付宝支付

步骤

1、目前 SDK 已发布到 Maven Central,开发者可使用 gradle 编译、更新支付宝支付 SDK。
android/app/build.gradle 文件中,需添加如下依赖:

dependencies {
  ...
  api 'com.alipay.sdk:alipaysdk-android:+@aar'  //加这个
  ...
}

2、在android/app/src/main/AndroidMainifest.xml中添加以下权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

3、在android/app/src/main/java/com.xxxxx下面创建alipay文件夹(xxxxx是你的包名),并在alipay文件夹下新建PayModule.javaPayPackage.java两个文件。
4、PayModule.java内容:

package com.xxxxx.alipay;  //xxxxx是包名

import com.alipay.sdk.app.PayTask;
import com.alipay.sdk.app.EnvUtils;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
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.WritableMap;

import java.util.Map;

public class PayModule extends ReactContextBaseJavaModule {

    private final ReactApplicationContext reactContext;

    public PayModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
    }
    @Override
    public String getName() {
        return "PayModule";
    }

    @ReactMethod
    public void setAlipayScheme(String scheme){

    }

    @ReactMethod
    public void setAlipaySandbox(Boolean isSandbox) {
        if (isSandbox) {
            EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
        } else {
            EnvUtils.setEnv(EnvUtils.EnvEnum.ONLINE);
        }
    }

    @ReactMethod
    public void alipay(final String orderInfo, final Callback promise) {

        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(getCurrentActivity());
                Map<String, String> result = alipay.payV2(orderInfo, true);
                WritableMap map = Arguments.createMap();
                map.putString("memo", result.get("memo"));
                map.putString("result", result.get("result"));
                map.putString("resultStatus", result.get("resultStatus"));
                promise.invoke(map);
            }
        };
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }
}

5、PayPackage.java内容:

package com.xxxxx.alipay;  //xxxxx是包名

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
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 PayPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new PayModule(reactContext));
        return modules;
    }

    // 早期版本的RN如果有报错取消这个注释即可
    // @override
    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

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

6、在android/app/src/main/java/com/xxxxx/MainApplication.java文件里添加:

import com.xxxxx.alipay.PayPackage;   //加这个
public class MainApplication extends Application implements ReactApplication {
   ...
        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 PayPackage());   //加这个
          return packages;
        }

      ...

7、封装及引用模块
封装Alipay.js

import { NativeModules } from 'react-native';

function alipay(pay_url) {
    return new Promise((resolve, reject) => {
        NativeModules.PayModule.alipay(pay_url, res => {
            // '6001': '支付取消', '6002': '网络连接出错', '4000': '支付失败', '5000': '重复请求'
            if (res.resultStatus === '9000') {
                resolve(res)
            } else {
                reject(res)
            }
        });
    })
}

export default alipay;

8 、在业务中使用

// 支付宝支付
import alipay from '@/utils/Alipay';

const apipayFun = async () => {
        const timestamp = new Date().getTime();
        const times = Number(BigInt(timestamp).toString());
        const obj = {
            product_id: 10,
            pay_type: 1,
            order_time: times
        }
        const res = await createOrder(obj)
        //createOrder是服务端接口,提供订单ID和当前时间戳返回支付信息
        if (res.code == 0) {
            try {
                //res.data.pay_url是支付地址
                const paymentResult = await alipay(res.data.pay_url);
                console.log('支付成功', paymentResult);
            } catch (error) {
                console.error('支付失败', error);
            }
        }
    }

服务端参考 小程序文档 - 支付宝文档中心

微信登录以及支付参考文档 Native Wechat | Native WeChat 

githup地址 https://github.com/Hector-Chong/native-wechat

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值