ReactNative 安卓支付宝微信支付接入
微信支付接入
首先,在android/src/main/java/*
新建 pay
支付文件夹,如下所示:
新建 wechat
,在文件夹里面新建 Const.java
, WeChatPay.java
文件:
增加Const.java
配置
package com.xxx.pay.wechat;public class Const {public static final String APP_ID = "you APP_ID";
}
增加WeChatPay.java
支付逻辑
package com.collection.pay.wechat;import com.facebook.react.bridge.Arguments;
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.facebook.react.bridge.WritableMap;import com.tencent.mm.opensdk.constants.Build;
import com.tencent.mm.opensdk.modelmsg.SendAuth; // sendAuth
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;public class WeChatPay extends ReactContextBaseJavaModule {private static ReactApplicationContext reactContext;public static Promise promise;private final static String NOT_REGISTERED = "registerApp required.";private IWXAPI api = null;private String appId;public WeChatPay(ReactApplicationContext context) {super(context);reactContext = context;// 注册微信开发,绑定APP_ID//api = WXAPIFactory.createWXAPI(context, Const.APP_ID, false);// api.registerApp(Const.APP_ID);}@Overridepublic String getName() {return "WechatModule";}// 注册appId@ReactMethodprivate void registerApp(String appId, Promise promise) {try {this.appId = appId;api = WXAPIFactory.createWXAPI(reactContext.getApplicationContext(), null, false);promise.resolve(api.registerApp(appId));} catch (Exception e) {promise.reject("-1", e.getMessage());}}// 判断是否安装客户端@ReactMethodprivate void isWxInstalled(Promise promise) {try {if (api == null) {throw new Exception(NOT_REGISTERED);}promise.resolve(api.isWXAppInstalled());} catch (Exception e) {promise.reject("-1", e.getMessage());}}// 打开微信客户端@ReactMethodprivate void openWxApp(Promise promise) {try {if (api == null) {throw new Exception(NOT_REGISTERED);}promise.resolve(api.openWXApp());} catch (Exception e) {promise.reject("-1", e.getMessage());}}// 获取微信版本号@ReactMethodprivate void getAppVersion(Promise promise) {try {if (api == null) {throw new Exception(NOT_REGISTERED);}promise.resolve(api.getWXAppSupportAPI());} catch (Exception e) {promise.reject("-1", e.getMessage());}}// 微信授权登录@ReactMethodprivate void sendAuthRequest(String scope, String state, Promise promise) {try {if (api == null) {throw new Exception(NOT_REGISTERED);}SendAuth.Req req = new SendAuth.Req();req.scope = scope;req.state = state;promise.resolve(api.sendReq(req));} catch (Exception e) {promise.reject("-1", e.getMessage());}}// 微信支付@ReactMethodprivate void wxPay(ReadableMap request, Promise promise) {WeChatPay.promise = promise;PayReq req = new PayReq();req.appId = request.getString("appid");req.partnerId = request.getString("partnerid");req.prepayId = request.getString("prepayid");req.packageValue = "Sign=WXPay";req.nonceStr = request.getString("nonceStr");req.timeStamp = request.getString("timestamp");req.sign = request.getString("sign");int wxSdkVersion = api.getWXAppSupportAPI();if (wxSdkVersion>= Build.PAY_INSURANCE_SDK_INT) {api.sendReq(req);} else if (wxSdkVersion == 0) {WritableMap map = Arguments.createMap();map.putInt("errCode", -3);WeChatPay.promise.resolve(map);} else {WritableMap map = Arguments.createMap();map.putInt("errCode", -4);WeChatPay.promise.resolve(map);}}
}
在 pay
文件夹外部与其同级出新建wxapi
文件夹,新增 WXPayEntryActivity.java
package com.xxx.wxapi;import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.IllegalViewOperationException;
import com.reactnativepay.pay.wechat.Const;
import com.reactnativepay.pay.wechat.WeChatPay;
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;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {// 这里填写申请的微信开发者IDprivate static final String TAG = "" ; // 微信IDprivate IWXAPI api;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this, Const.APP_ID);api.handleIntent(getIntent(), this);}@Overridepublic void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq baseReq) {return;}@Overridepublic void onResp(BaseResp baseResp) {System.out.println("onResp2");if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {try {// 支付结果返回WritableMap map = Arguments.createMap();map.putInt("errCode", baseResp.errCode);WeChatPay.promise.resolve(map);finish();} catch (IllegalViewOperationException e) {// 错误返回WeChatPay.promise.reject(e);}}}
}
在pay
下面 PayPackage.java
package com.xxx.pay;import com.reactnativepay.pay.alipay.AliPay;
import com.reactnativepay.pay.wechat.WeChatPay;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 PayPackage 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 AliPay(reactContext)); // alipaymodules.add(new WeChatPay(reactContext)); // wechat payreturn modules;};
}
在 MainApplication.java
新增配置
import com.xxx.pay.PayPackage;// other code
packages.add(new PayPackage());
return packages;
// other code
支付宝支付接入
在 pay
下面新增 AliPay
、PayResult
新增 AliPay.java
package com.xxx.pay.alipay;import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;import java.util.Map;
import com.alipay.sdk.app.PayTask;import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;public class AliPay extends ReactContextBaseJavaModule {private static ReactApplicationContext reactContext;public static Promise promise;public AliPay(ReactApplicationContext context) {super(context);// 挂载reactContext = context;}private static final int SDK_PAY_FLAG = 1;/*** ReactContextBaseJavaModule要求派生类实现getName方法* 这个函数用于返回一个字符串名字,这个名字在 JavaScript 端标记这个模块* NativeModules.AliPay访问到这个模块。* @return 用于在JavaScript中调用的方法名称*/@Overridepublic String getName() {return "AliPay";}@SuppressLint("HandlerLeak")private Handler mHandler = new Handler(Looper.getMainLooper()) {@SuppressWarnings("unised")public void handleMessage(Message msg) {switch (msg.what){case SDK_PAY_FLAG: {@SuppressWarnings("unchecked")PayResult payResult = new PayResult((Map<String, String>) msg.obj);String resultInfo = payResult.getResult();String resultStatus = payResult.getResultStatus();AliPay.promise.resolve(resultStatus);break;}default:break;}}};@ReactMethodpublic void payV2(String orderInfo, Promise promise) {AliPay.promise = promise;final Runnable payRunnable = new Runnable() {@Overridepublic void run() {PayTask alipay = new PayTask(getCurrentActivity());Map<String, String> result = alipay.payV2(orderInfo, true);Log.i("msp", result.toString());Message msg = new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};Thread payThread = new Thread(payRunnable);payThread.start();}
}
新增 PayResult.java
package com.xxx.pay.alipay;import java.util.Map;import android.text.TextUtils;public class PayResult {private String resultStatus;private String result;private String memo;public PayResult(Map<String, String> rawResult) {if (rawResult == null) {return;}for (String key : rawResult.keySet()) {if (TextUtils.equals(key, "resultStatus")) {resultStatus = rawResult.get(key);} else if (TextUtils.equals(key, "result")) {result = rawResult.get(key);} else if (TextUtils.equals(key, "memo")) {memo = rawResult.get(key);}}}@Overridepublic String toString() {return "resultStatus={" + resultStatus + "};memo={" + memo+ "};result={" + result + "}";}/*** @return the resultStatus*/public String getResultStatus() {return resultStatus;}/*** @return the memo*/public String getMemo() {return memo;}/*** @return the result*/public String getResult() {return result;}
}
在pay
下面的PayPackage
中添加配置
import com.reactnativepay.pay.alipay.AliPay;// ...other codemodules.add(new AliPay(reactContext)); // alipay// ...other code
客户端调用
import { NativeModules } 'react-native'const { WechatModule } = NativeModules;// 是否安装微信
const registerApp = async () => {await WechatModule.registerApp('appId')
}// 微信登录
const sendAuthWxLogin = async () => {await WechatModule.sendAuthRequest('1', '0')
}
ReactNative 安卓支付宝微信支付接入相关推荐
- 【安卓学习之第三方库】 Rxpay学习:支付宝微信支付
█ [安卓学习之第三方库] Rxpay学习:支付宝微信支付 █ 相关文章: [安卓学习之第三方库]库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例) [安卓学习之第三方库] 消息 ...
- 西米支付:支付宝/微信支付/银联支付通道的接入介绍
本文以电脑网站支付为例,着重对第三方支付通道的接入进行了分析,包括支付宝支付接入.微信支付接入及银联支付接入. 1.支付宝支付接入 支付宝支付能力主要有当面付.刷脸付.App支付.手机网站支付.电脑网 ...
- WooCommerce接入支付宝微信支付
WooCommerce接入支付宝微信支付 前言 安装支付宝插件(方法一) 安装配置 获取注册信息 安装支付宝插件(方法二) 安装微信支付插件 下载及安装 获取微信公众号APPID,微信支付密钥 获取微 ...
- android微信支付吊不起微信,安卓系统微信支付失败原因
微信支付在我们的生活中很重要,那安卓系统微信支付失败原因是什么呢?了解网购安全,首先就要了解佰佰安全网小编就带您认识一下吧. 1.第一种原因就是默写数据参数有问题.一般都是秘钥有问题.需自己登陆商家版 ...
- springboot整合支付宝微信支付案例+代码
springboot支付宝微信支付 每天多学一点点~ 之前写好了一篇,不下心被覆盖的,我的锅....下次写博客记得导出来!!!! 话不多说,这就开始吧- 文章目录 springboot支付宝微信支付 ...
- php调用支付宝微信支付接口 免签约 实测能用
找了很多支付宝微信支付收款的办法,接入的时候发现根本不靠谱,终于实测到了一个可以用的,(验证效果不用改代码,php环境下Demo.php直接打开看就行了 附件放在下面了) 支付宝收款实测有效,微信支付 ...
- 微信支付接入的那点事儿
本文来自作者 javen 在 GitChat 上分享「微信支付接入的那点事儿」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 前言 本次 Chat 中涉及到的图片.统计数据均来自于网络,截图 ...
- 【纯干货】微信支付接入攻略—JAVA代码分享
[纯干货]微信支付接入攻略-JAVA代码分享 [声明]本文作者是Gekec网站开发总监Arne Chen.Arne在实际接入微信支付时遇到诸多问题并且逐一解决的过程中总结了不少实战经验.文中引用代码是 ...
- C#开发微信门户及应用(32)--微信支付接入和API封装使用
C#开发微信门户及应用(32)--微信支付接入和API封装使用 在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去, ...
最新文章
- 关于Timer的用法,先简单记下,稍后编辑
- 云计算之KVM虚拟化实战
- ABAP data extract 数据抽取总结
- python requests请求失败重试_Python Requests.post()请求失败时的retry设置
- Docker 安装 Redis (Redis 配置)
- 信安教程第二版-第17章网络安全应急响应技术原理与应用
- 字符串匹配算法——KMP算法学习
- php 会议室预定系统,MRBS开源会议室预订系统安装
- python中除法运算定律_数学有哪几种简便运算方法?(除了加、乘法交换、结合律,减、除法的性质)...
- 升级 XPLite 中的 IE
- 置信区间,置信水平/置信度
- 使用redis实现排行榜
- css元素可拖动,css3实现可拖动的魔方3d效果
- Direct2D (9) : 显示图像
- Bootstrap4从入门到精通视频教程
- 二维码 扫描框的 处理 美化功能 喜欢的 自己直接替换和修改
- CAD标注的偏移尺寸和实际尺寸不同该如何解决?
- getchar()作用
- 常见电路结构分析四:plc控制系统与其他控制系统的比较
- 怎样把图片保存为html文件,在Word中通过把编辑的图片另存为HTML文件实现转换图片...
热门文章
- SD卡应用总结(Fatfs)
- 小学知识点~句式全覆盖专题
- Thinker热修复
- win10打开计算机管理闪退,Win10控制面板无法打开或闪退的解决方法
- CodeBlocks C++开发环境的配置及使用
- 算法 - 重点 - 堆排序(Heap_sort)
- Word控件Spire.Doc 【超链接】教程(8):在 C#/VB.NET 中链接到 Word 文档中的书签
- 【大数据】六、频繁项集与关联规则(频繁项集、关联规则、A-Priori、PCY)
- 中国国际消费电子Leader创新奖征集函
- js中对应false和true的值