前提说明:此blog仅为业余时间,为了测试后端Java程序的paySign是否正确,而编写的测试代码 Alipay参考: https://github.com/0x5e/react-native-alipay Wxpay参考: https://www.jianshu.com/p/6a792118fae4
前提环境
- Node环境
- Android环境
- rn环境
一、创建RN项目
1.1 初始化RN项目
react-native init pay_demo
1.2 测试项目是否能够运行
如果,能够在手机上,正常运行安装app,即初始项目搭建成功react-native run-android
二、集成Alipay
Alipay前景说明:采用SandBox进行支付测试,所安装的依赖,也可支持正式环境的测试 所安装的依赖为: @0x5e/react-native-alipay 官方github: https://github.com/0x5e/react-native-alipay
2.1 安装依赖
# npm 安装npm install @0x5e/react-native-alipay// yarn 安装yarn add @0x5e/react-native-alipay
2.2 配置Alipay
参照官方github: https://github.com/0x5e/react-native-alipay/blob/master/docs/android-setup.md
2.3 配置完成之后,编写页面测试
2.3.1 导入依赖
import Alipay from '@0x5e/react-native-alipay';
2.3.2 支付按钮
<TouchableOpacity onPress={this._aliPay}><View style={styles.btn}><Text style={styles.text}>支付宝支付</Text></View></TouchableOpacity>
2.3.3 支付响应函数
这里,使用调用接口的方式,获取到服务端返回的paySign签名
_aliPay = async () => {var options = {method: 'GET'}fetch('http://your-server-address, options).then((response) => {return response.text();}).then((responseText) => {let resData = JSON.parse(responseText);let data = resData.data;// 设置为沙箱环境,如果是正式环境,注释即可,默认是正式环境Alipay.setAlipaySandbox(true)// 调用pay方法,就能调其支付宝Alipay.pay(data).then(function(data){console.log(data);}, function (err) {console.log(err);});})};
服务端的签名返回数据示例为
alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2016101300678365&biz_content=%7B%22body%22%3A%22%E6%88%91%E6%98%AF%E7%94%9F%E6%88%90%E4%BA%8C%E7%BB%B4%E7%A0%81%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%222151520200910%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22subject%22%3A%22paytest%22%2C%22timeout_express%22%3A%2230m%22%2C%22total_amount%22%3A%221%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http%3A%2F%2F5tgtz9.natappfree.cc%2Falipay_callback&sign=mpbaLONr1fdbxYfRD%2FSKSzZtMuzol4ZimLSZQXOSDKurQntHW1CgleWac6egDaEcVYahzYjzDMKJwFwfVpbyi0xDSfqP1YshO96y%2BafNb0XJYhwYC60eHywqgHGhGCdxVQLohI2bCkeVkLSSZv9Xh0r6HfXWKOtTHPPnRtcUYjEaJqbe8qNwe1wkAF%2FfqVWrNTZHxS4JrUAtdb2ty0U6uSc%2BLcJrJRMAKax5s9S2EK66yg0fHZAIctPSjQMW5%2FLl0Noupwrw2nSDwAHbPN8a07%2FjkS40VbADbvN%2FPQCM9uEQXC2wJI57P%2B7MmY4O0bVGy3mKeMuq9LGbcqgCByOeYQ%3D%3D&sign_type=RSA2×tamp=2020-09-10+10%3A10%3A30&version=1.0"
2..4 页面编写完成,运行项目进行测试
react-native run-android
点击按钮,如果正确的调起了沙箱的支付宝,说明,服务端签名成功,客户端也没有问题,Alipay sandbox测试成功
三、集成wxpay
前提说明,wxpay的申请流程,比Alipay复杂很多,所以,没有的朋友,可以结束了….
3.1 安装依赖
npm install react-native-wechatyarn add react-native-wechat
2.2配置 wxpay
2.2.1 添加 WeChatPackage
在 android/app/src/main/java/your package/MainApplication.java 中添加如下的代码
@Overrideprotected List<ReactPackage> getPackages() {@SuppressWarnings("UnnecessaryLocalVariable")List<ReactPackage> packages = new PackageList(this).getPackages();packages.add(new WeChatPackage());return packages;}
2.2.2 创建wxapi 包,添加如下的几个类
WXEntryActivity.java
import android.app.Activity;import android.os.Bundle;import com.theweflex.react.WeChatModule;public class WXEntryActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);WeChatModule.handleIntent(getIntent());finish();}}
WXPayEntryActivity.java
import android.app.Activity;import android.os.Bundle;import com.theweflex.react.WeChatModule;public class WXPayEntryActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);WeChatModule.handleIntent(getIntent());finish();}}
2.2.3 修改 android/settings.gradle
在最后添加如下的内容
include ':RCTWeChat'project(':RCTWeChat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android')
2.2.4 修改 AndroidManifest.xml
添加如下的内容
<application><activityandroid:name=".wxapi.WXEntryActivity"android:label="@string/app_name"android:exported="true"/><activityandroid:name=".wxapi.WXPayEntryActivity"android:label="@string/app_name"android:exported="true"/></application>
2.3页面测试
与上述的alipay相同,其中的差别为支付响应函数
_wxpay = async () => {WeChat.registerApp('your appid').then((res) => {console.log('res', res);});var options = {method: 'GET'}fetch('http://your-server-address, options).then((response) => {return response.text();}).then((responseText) => {let resData = JSON.parse(responseText);let payObject = resData.data;let payData = {partnerId: payObject.partnerid, // 商家向财付通申请的商家idprepayId: payObject.prepayid, // 预支付订单nonceStr: payObject.noncestr, // 随机串,防重发timeStamp: payObject.timestamp , // 时间戳,防重发.package: 'Sign=WXPay', // 商家根据财付通文档填写的数据和签名sign: payObject.paySign // 商家根据微信开放平台文档对数据做的签名}WeChat.pay(payData).then((success) => {console.log("支付成功" + success)}).catch((error) => {if (error.errCode == -2) {console.log('取消支付')}else{console.log('支付失败' + error);}})});}
2.4 进行测试
如果一切顺利,且微信公众平台的配置无误的话,应该是能够调起支付的
