diff --git a/README.md b/README.md
index bd7dd62..7769d50 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@ react-native-uiwjs-alipay
## Getting started
```bash
+yarn install react-native-uiwjs-alipay --save
# react-native version >= 0.60+
$ cd ios && pod install
# or
@@ -21,13 +22,26 @@ $ react-native link react-native-uiwjs-alipay
```javascript
import Alipay from 'react-native-uiwjs-alipay';
-// 设置 支付宝URL Schemes
+// 设置 支付宝 URL Schemes
+// scheme = `ap` + `APPID`
Alipay.setAlipayScheme(scheme);
-// 支付宝 Android 支付
-// orderInfo 是后台拼接好的支付参数
-Alipay.alipayAndroid(orderInfo,(res)=>console.log(res))
// 支付宝 iOS 端的支付
-Alipay.alipay(orderInfo, (res)=>console.log(res))
+// payInfo 是后台拼接好的支付参数
+Alipay.alipay(payInfo, (res)=>console.log(res))
+```
+
+订单详情 [`payInfo`](https://opendocs.alipay.com/open/204/105295#%E5%BF%AB%E6%8D%B7%E8%AE%A2%E5%8D%95%E6%94%AF%E4%BB%98%20iOS) 编码前的数据
+
+```bash
+app_id=xxxxxxxxx&biz_content={"timeout_express":"30m","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http://domain.merchant.com/payment_notify&sign_type=RSA2×tamp=2016-08-25 20:26:31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=
+```
+
+订单详情 `payInfo` 编码的数据
+
+> 订单参数通过 `encodeURIComponent` 编码 和 `decodeURIComponent` 解码。
+
+```bash
+app_id=xxxxxxxxx&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA2×tamp=2016-08-25%2020%3A26%3A31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D
```
### 其它
diff --git a/example/App.js b/example/App.js
index 5605408..33a9041 100644
--- a/example/App.js
+++ b/example/App.js
@@ -1,37 +1,27 @@
-/**
- * Sample React Native App
- *
- * adapted from App.js generated by the following command:
- *
- * react-native init example
- *
- * https://github.com/facebook/react-native
- */
-
import React, { Component } from 'react';
-import { Platform, StyleSheet, Text, View } from 'react-native';
+import { Button, StyleSheet, Text, View } from 'react-native';
import Alipay from 'react-native-uiwjs-alipay';
-export default class App extends Component<{}> {
- state = {
- status: 'starting',
- message: '--'
- };
+export default class App extends Component {
componentDidMount() {
- Alipay.sampleMethod('Testing', 123, (message) => {
- this.setState({
- status: 'native callback received',
- message
- });
+ Alipay.setAlipayScheme('ap2021001172656340');
+ }
+ aliPay = () => {
+ const payInfo = 'app_id=2021001172656340&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA2×tamp=2016-08-25%2020%3A26%3A31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D';
+ Alipay.alipay(payInfo, (resule) => {
+ console.log(res)
});
}
render() {
return (
- ☆Alipay example☆
- STATUS: {this.state.status}
- ☆NATIVE CALLBACK MESSAGE☆
- {this.state.message}
+ ☆Alipay Example☆
+
);
}
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index 8428adb..3f3a664 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1,4 +1,5 @@
PODS:
+ - AlipaySDK-iOS (15.7.4)
- boost-for-react-native (1.63.0)
- CocoaAsyncSocket (7.6.4)
- CocoaLibEvent (1.0.0)
@@ -234,6 +235,7 @@ PODS:
- React-jsi (= 0.62.2)
- React-jsinspector (0.62.2)
- react-native-uiwjs-alipay (1.0.0):
+ - AlipaySDK-iOS
- React
- React-RCTActionSheet (0.62.2):
- React-Core/RCTActionSheetHeaders (= 0.62.2)
@@ -350,6 +352,7 @@ DEPENDENCIES:
SPEC REPOS:
trunk:
+ - AlipaySDK-iOS
- boost-for-react-native
- CocoaAsyncSocket
- CocoaLibEvent
@@ -418,6 +421,7 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
+ AlipaySDK-iOS: 8659cdb4403de7e5f26ad8b699864a9cbe53384c
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
@@ -443,7 +447,7 @@ SPEC CHECKSUMS:
React-jsi: b6dc94a6a12ff98e8877287a0b7620d365201161
React-jsiexecutor: 1540d1c01bb493ae3124ed83351b1b6a155db7da
React-jsinspector: 512e560d0e985d0e8c479a54a4e5c147a9c83493
- react-native-uiwjs-alipay: 3b18d6ba6e1592d3b2f3e01eb11f4b2007073950
+ react-native-uiwjs-alipay: 9d1c97894c7b0357bab0cb605f2ee813e6f6abb8
React-RCTActionSheet: f41ea8a811aac770e0cc6e0ad6b270c644ea8b7c
React-RCTAnimation: 49ab98b1c1ff4445148b72a3d61554138565bad0
React-RCTBlob: a332773f0ebc413a0ce85942a55b064471587a71
diff --git a/example/ios/example.xcodeproj/project.pbxproj b/example/ios/example.xcodeproj/project.pbxproj
index 1020fee..417c6cf 100644
--- a/example/ios/example.xcodeproj/project.pbxproj
+++ b/example/ios/example.xcodeproj/project.pbxproj
@@ -16,10 +16,10 @@
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
- 65B2B6F82D71DDA49E6955A4 /* libPods-example-exampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A5FCDEAD3F8C83C57C15C019 /* libPods-example-exampleTests.a */; };
- 8D66ACA3EA6AE8C58BA823D2 /* libPods-example-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AB7FC013A7405ACF24281E6 /* libPods-example-tvOS.a */; };
- DD16C9D1F6E9E55CE481F09C /* libPods-example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A314571B62A9C09A0796D5AA /* libPods-example.a */; };
- F31B5CFE45DE1E536EB5A3F7 /* libPods-example-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A1A11BBB72F59749B921AD32 /* libPods-example-tvOSTests.a */; };
+ 524953C32B32757269BDDB07 /* libPods-example-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F351FDEB0B782C4FC829B6DD /* libPods-example-tvOSTests.a */; };
+ 60F01FFBED55E483F11EC0A6 /* libPods-example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7A7A2F204B0A989E57BEEBD /* libPods-example.a */; };
+ 75AE9E73C3619AA46CF08AF1 /* libPods-example-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DB620824D804BD4BA4FAA319 /* libPods-example-tvOS.a */; };
+ A6C7C98115F6576B9603B3A5 /* libPods-example-exampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 82920B5B98F9C381165BD54A /* libPods-example-exampleTests.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -44,6 +44,7 @@
00E356EE1AD99517003FC87E /* exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
00E356F21AD99517003FC87E /* exampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampleTests.m; sourceTree = ""; };
+ 0A267068FB6B81D51FD7D4C5 /* Pods-example-exampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-exampleTests.debug.xcconfig"; path = "Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests.debug.xcconfig"; sourceTree = ""; };
13B07F961A680F5B00A75B9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = example/AppDelegate.h; sourceTree = ""; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = example/AppDelegate.m; sourceTree = ""; };
@@ -51,22 +52,21 @@
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = example/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = example/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = example/main.m; sourceTree = ""; };
- 1472691BE9D2F96314C3064F /* Pods-example-exampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-exampleTests.release.xcconfig"; path = "Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests.release.xcconfig"; sourceTree = ""; };
- 1AB7FC013A7405ACF24281E6 /* libPods-example-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "example-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- 5E85582AF26B968270BCDEEA /* Pods-example-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.release.xcconfig"; sourceTree = ""; };
- A1A11BBB72F59749B921AD32 /* libPods-example-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- A1B3BA240700A008E359F9B7 /* Pods-example-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOS.release.xcconfig"; path = "Target Support Files/Pods-example-tvOS/Pods-example-tvOS.release.xcconfig"; sourceTree = ""; };
- A314571B62A9C09A0796D5AA /* libPods-example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- A5FCDEAD3F8C83C57C15C019 /* libPods-example-exampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-exampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- B8B7A164FC21D3CC1EEB1C5D /* Pods-example-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.debug.xcconfig"; sourceTree = ""; };
- D0F7D3CDC486D3D736A85DE2 /* Pods-example-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-example-tvOS/Pods-example-tvOS.debug.xcconfig"; sourceTree = ""; };
- DE12ECA1E0BD7B394663C8D7 /* Pods-example-exampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-exampleTests.debug.xcconfig"; path = "Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests.debug.xcconfig"; sourceTree = ""; };
- E8B0F4041F7CCDE013BD1352 /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.debug.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.debug.xcconfig"; sourceTree = ""; };
+ 2E6896F62F9EE3F2734B1ACF /* Pods-example-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-example-tvOS/Pods-example-tvOS.debug.xcconfig"; sourceTree = ""; };
+ 432682F84776756CED076533 /* Pods-example-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.debug.xcconfig"; sourceTree = ""; };
+ 82920B5B98F9C381165BD54A /* libPods-example-exampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-exampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ A4A2B92B510EF1BFABBA0971 /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.debug.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.debug.xcconfig"; sourceTree = ""; };
+ A6218796671BF84CCB4E031F /* Pods-example-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOS.release.xcconfig"; path = "Target Support Files/Pods-example-tvOS/Pods-example-tvOS.release.xcconfig"; sourceTree = ""; };
+ A7A7A2F204B0A989E57BEEBD /* libPods-example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B28C1A39523FC6C2955C441A /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.release.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.release.xcconfig"; sourceTree = ""; };
+ B670558CB3E0ADA97B577046 /* Pods-example-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.release.xcconfig"; sourceTree = ""; };
+ C463C38FE6CD2515844FA8FA /* Pods-example-exampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-exampleTests.release.xcconfig"; path = "Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests.release.xcconfig"; sourceTree = ""; };
+ DB620824D804BD4BA4FAA319 /* libPods-example-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
- FB819E3CC712E60315FEB622 /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.release.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.release.xcconfig"; sourceTree = ""; };
+ F351FDEB0B782C4FC829B6DD /* libPods-example-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -74,7 +74,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 65B2B6F82D71DDA49E6955A4 /* libPods-example-exampleTests.a in Frameworks */,
+ A6C7C98115F6576B9603B3A5 /* libPods-example-exampleTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -82,7 +82,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- DD16C9D1F6E9E55CE481F09C /* libPods-example.a in Frameworks */,
+ 60F01FFBED55E483F11EC0A6 /* libPods-example.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -90,7 +90,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 8D66ACA3EA6AE8C58BA823D2 /* libPods-example-tvOS.a in Frameworks */,
+ 75AE9E73C3619AA46CF08AF1 /* libPods-example-tvOS.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -98,7 +98,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- F31B5CFE45DE1E536EB5A3F7 /* libPods-example-tvOSTests.a in Frameworks */,
+ 524953C32B32757269BDDB07 /* libPods-example-tvOSTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -141,10 +141,10 @@
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
- A314571B62A9C09A0796D5AA /* libPods-example.a */,
- A5FCDEAD3F8C83C57C15C019 /* libPods-example-exampleTests.a */,
- 1AB7FC013A7405ACF24281E6 /* libPods-example-tvOS.a */,
- A1A11BBB72F59749B921AD32 /* libPods-example-tvOSTests.a */,
+ A7A7A2F204B0A989E57BEEBD /* libPods-example.a */,
+ 82920B5B98F9C381165BD54A /* libPods-example-exampleTests.a */,
+ DB620824D804BD4BA4FAA319 /* libPods-example-tvOS.a */,
+ F351FDEB0B782C4FC829B6DD /* libPods-example-tvOSTests.a */,
);
name = Frameworks;
sourceTree = "";
@@ -152,16 +152,15 @@
7809324E0DCE45C9E15C5B90 /* Pods */ = {
isa = PBXGroup;
children = (
- E8B0F4041F7CCDE013BD1352 /* Pods-example.debug.xcconfig */,
- FB819E3CC712E60315FEB622 /* Pods-example.release.xcconfig */,
- DE12ECA1E0BD7B394663C8D7 /* Pods-example-exampleTests.debug.xcconfig */,
- 1472691BE9D2F96314C3064F /* Pods-example-exampleTests.release.xcconfig */,
- D0F7D3CDC486D3D736A85DE2 /* Pods-example-tvOS.debug.xcconfig */,
- A1B3BA240700A008E359F9B7 /* Pods-example-tvOS.release.xcconfig */,
- B8B7A164FC21D3CC1EEB1C5D /* Pods-example-tvOSTests.debug.xcconfig */,
- 5E85582AF26B968270BCDEEA /* Pods-example-tvOSTests.release.xcconfig */,
+ A4A2B92B510EF1BFABBA0971 /* Pods-example.debug.xcconfig */,
+ B28C1A39523FC6C2955C441A /* Pods-example.release.xcconfig */,
+ 0A267068FB6B81D51FD7D4C5 /* Pods-example-exampleTests.debug.xcconfig */,
+ C463C38FE6CD2515844FA8FA /* Pods-example-exampleTests.release.xcconfig */,
+ 2E6896F62F9EE3F2734B1ACF /* Pods-example-tvOS.debug.xcconfig */,
+ A6218796671BF84CCB4E031F /* Pods-example-tvOS.release.xcconfig */,
+ 432682F84776756CED076533 /* Pods-example-tvOSTests.debug.xcconfig */,
+ B670558CB3E0ADA97B577046 /* Pods-example-tvOSTests.release.xcconfig */,
);
- name = Pods;
path = Pods;
sourceTree = "";
};
@@ -205,10 +204,11 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */;
buildPhases = (
- CC91F4A383DA5C0024811885 /* [CP] Check Pods Manifest.lock */,
+ 7B8B4D2213954B3C9A1C3D17 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
+ 09A0F0F6963150AE78790839 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -224,12 +224,13 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */;
buildPhases = (
- D11B254356D11C70284FDD1B /* [CP] Check Pods Manifest.lock */,
+ E2FED7E58261D0FB4F64A5DE /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ AA8CE12E409252762B4BCFE4 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -244,7 +245,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */;
buildPhases = (
- 6653C157B425C0B9995AA48D /* [CP] Check Pods Manifest.lock */,
+ 01AF3800197600F41FB373E5 /* [CP] Check Pods Manifest.lock */,
FD10A7F122414F3F0027D42C /* Start Packager */,
2D02E4771E0B4A5D006451C7 /* Sources */,
2D02E4781E0B4A5D006451C7 /* Frameworks */,
@@ -264,7 +265,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */;
buildPhases = (
- 88AE37B90A92E74B7C490BD3 /* [CP] Check Pods Manifest.lock */,
+ 7630C1A36AE97C51E7F73EA0 /* [CP] Check Pods Manifest.lock */,
2D02E48C1E0B4A5D006451C7 /* Sources */,
2D02E48D1E0B4A5D006451C7 /* Frameworks */,
2D02E48E1E0B4A5D006451C7 /* Resources */,
@@ -292,6 +293,7 @@
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
+ DevelopmentTeam = 968DSZ49MT;
LastSwiftMigration = 1120;
};
2D02E47A1E0B4A5D006451C7 = {
@@ -375,21 +377,7 @@
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
- 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Bundle React Native Code And Images";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
- };
- 6653C157B425C0B9995AA48D /* [CP] Check Pods Manifest.lock */ = {
+ 01AF3800197600F41FB373E5 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -411,7 +399,39 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 88AE37B90A92E74B7C490BD3 /* [CP] Check Pods Manifest.lock */ = {
+ 09A0F0F6963150AE78790839 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-resources.sh",
+ "${PODS_ROOT}/AlipaySDK-iOS/AlipaySDK.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AlipaySDK.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example-exampleTests/Pods-example-exampleTests-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native Code And Images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
+ };
+ 7630C1A36AE97C51E7F73EA0 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -433,7 +453,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- CC91F4A383DA5C0024811885 /* [CP] Check Pods Manifest.lock */ = {
+ 7B8B4D2213954B3C9A1C3D17 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -455,7 +475,25 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- D11B254356D11C70284FDD1B /* [CP] Check Pods Manifest.lock */ = {
+ AA8CE12E409252762B4BCFE4 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources.sh",
+ "${PODS_ROOT}/AlipaySDK-iOS/AlipaySDK.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AlipaySDK.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ E2FED7E58261D0FB4F64A5DE /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -582,7 +620,7 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = DE12ECA1E0BD7B394663C8D7 /* Pods-example-exampleTests.debug.xcconfig */;
+ baseConfigurationReference = 0A267068FB6B81D51FD7D4C5 /* Pods-example-exampleTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -605,7 +643,7 @@
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 1472691BE9D2F96314C3064F /* Pods-example-exampleTests.release.xcconfig */;
+ baseConfigurationReference = C463C38FE6CD2515844FA8FA /* Pods-example-exampleTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
@@ -625,11 +663,12 @@
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = E8B0F4041F7CCDE013BD1352 /* Pods-example.debug.xcconfig */;
+ baseConfigurationReference = A4A2B92B510EF1BFABBA0971 /* Pods-example.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 968DSZ49MT;
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
@@ -652,11 +691,12 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = FB819E3CC712E60315FEB622 /* Pods-example.release.xcconfig */;
+ baseConfigurationReference = B28C1A39523FC6C2955C441A /* Pods-example.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 968DSZ49MT;
INFOPLIST_FILE = example/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@@ -673,7 +713,7 @@
};
2D02E4971E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = D0F7D3CDC486D3D736A85DE2 /* Pods-example-tvOS.debug.xcconfig */;
+ baseConfigurationReference = 2E6896F62F9EE3F2734B1ACF /* Pods-example-tvOS.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
@@ -701,7 +741,7 @@
};
2D02E4981E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = A1B3BA240700A008E359F9B7 /* Pods-example-tvOS.release.xcconfig */;
+ baseConfigurationReference = A6218796671BF84CCB4E031F /* Pods-example-tvOS.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
@@ -729,7 +769,7 @@
};
2D02E4991E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = B8B7A164FC21D3CC1EEB1C5D /* Pods-example-tvOSTests.debug.xcconfig */;
+ baseConfigurationReference = 432682F84776756CED076533 /* Pods-example-tvOSTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
@@ -756,7 +796,7 @@
};
2D02E49A1E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 5E85582AF26B968270BCDEEA /* Pods-example-tvOSTests.release.xcconfig */;
+ baseConfigurationReference = B670558CB3E0ADA97B577046 /* Pods-example-tvOSTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
diff --git a/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/index.d.ts b/index.d.ts
new file mode 100644
index 0000000..64bb376
--- /dev/null
+++ b/index.d.ts
@@ -0,0 +1,32 @@
+
+/**
+ * 支付宝端支付
+ * 支付宝回调结果, 详情见 https://docs.open.alipay.com/204/105301
+ */
+export interface AliOrderResult {
+ out_trade_no: String; // 长度:64,商户网站唯一订单号 70501111111S001111119
+ trade_no: String; // 长度:64,该交易在支付宝系统中的交易流水号。最长64位。 2014112400001000340011111118
+ app_id: String; // 长度:32,支付宝分配给开发者的应用Id。 2014072300007148
+ total_amount: Price; // 长度:9 ,该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 9.00
+ seller_id: String; // 长度:16,收款支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字 20886894
+ msg: String; // 长度:16,处理结果的描述,信息来自于code返回结果的描述 success
+ charset: String; // 长度:16,编码格式 utf-8
+ timestamp: String; // 长度:32,时间 2016-10-11 17:43:36
+ code: String; // 长度:16,结果码 具体见公共错误码
+}
+
+
+export const Alipay: {
+ /**
+ * @param payInfo 支付详情
+ * @param result 支付宝回调结果
+ */
+ alipay: (payInfo: string, callback?: (result: AliOrderResult) => void) => void;
+ /**
+ * 设置支付宝跳转Scheme,仅 iOS
+ * @param scheme scheme = `ap` + `APPID`
+ */
+ setAlipayScheme: (scheme: string) => void;
+};
+
+export default Alipay;
\ No newline at end of file
diff --git a/index.js b/index.js
index 9a9091a..0fe2d6f 100644
--- a/index.js
+++ b/index.js
@@ -1,5 +1,23 @@
-import { NativeModules } from 'react-native';
+import { NativeModules, Platform } from 'react-native';
-const { Alipay } = NativeModules;
+export default class Alipay {
-export default Alipay;
+ /**
+ * 支付宝端支付
+ * @param orderInfo 支付详情
+ * @param callback 支付宝回调结果 详情见 https://docs.open.alipay.com/204/105301
+ */
+ static alipay(orderInfo, callback) {
+ NativeModules.Alipay.alipay(orderInfo, callback)
+ }
+
+ /**
+ * 设置支付宝跳转Scheme,仅 iOS
+ * @param scheme
+ */
+ static setAlipayScheme(scheme) {
+ if (Platform.OS === 'ios') {
+ NativeModules.Alipay.setAlipayScheme(scheme);
+ }
+ }
+}
diff --git a/ios/Alipay.m b/ios/Alipay.m
index 19ad5d4..c62e61d 100644
--- a/ios/Alipay.m
+++ b/ios/Alipay.m
@@ -1,13 +1,90 @@
#import "Alipay.h"
+#import
@implementation Alipay
+{
+ NSString *alipayScheme;
+ RCTResponseSenderBlock alipayCallBack;
+}
RCT_EXPORT_MODULE()
-RCT_EXPORT_METHOD(sampleMethod:(NSString *)stringArgument numberParameter:(nonnull NSNumber *)numberArgument callback:(RCTResponseSenderBlock)callback)
+- (instancetype)init
{
- // TODO: Implement some actually useful functionality
- callback(@[[NSString stringWithFormat: @"numberArgument: %@ stringArgument: %@", numberArgument, stringArgument]]);
+ self = [super init];
+ if (self) {
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:@"RCTOpenURLNotification" object:nil];
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (BOOL)handleOpenURL:(NSNotification *)aNotification
+{
+ NSString * aURLString = [aNotification userInfo][@"url"];
+ NSURL * aURL = [NSURL URLWithString:aURLString];
+ if ([aURL.host isEqualToString:@"safepay"]) {
+ // 支付跳转支付宝钱包进行支付,处理支付结果
+ [[AlipaySDK defaultService] processOrderWithPaymentResult:aURL standbyCallback:^(NSDictionary *resultDic) {
+ if (self->alipayCallBack != nil) {
+ self->alipayCallBack([[NSArray alloc] initWithObjects:resultDic, nil]);
+ self->alipayCallBack = nil;
+ }
+ NSLog(@"result = %@",resultDic);
+ }];
+
+ // 授权跳转支付宝钱包进行支付,处理支付结果
+ [[AlipaySDK defaultService] processAuth_V2Result:aURL standbyCallback:^(NSDictionary *resultDic) {
+ NSLog(@"result = %@",resultDic);
+ // 解析 auth code
+ NSString *result = resultDic[@"result"];
+ NSString *authCode = nil;
+ if (result.length>0) {
+ NSArray *resultArr = [result componentsSeparatedByString:@"&"];
+ for (NSString *subResult in resultArr) {
+ if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
+ authCode = [subResult substringFromIndex:10];
+ break;
+ }
+ }
+ // 返回结果回调
+ if (self->alipayCallBack != nil) {
+ self->alipayCallBack([[NSArray alloc] initWithObjects:resultArr, nil]);
+ self->alipayCallBack = nil;
+ }
+ }
+ NSLog(@"授权结果 authCode = %@", authCode?:@"");
+ }];
+ }
+ return NO;
+}
+
+RCT_EXPORT_METHOD(setAlipayScheme:(NSString *)scheme){
+ alipayScheme = scheme;
+}
+RCT_EXPORT_METHOD(alipay:(NSString *)info callback:(RCTResponseSenderBlock)callback)
+{
+ alipayCallBack = callback;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[AlipaySDK defaultService] payOrder:info fromScheme:alipayScheme callback:^(NSDictionary *resultDic) {
+ NSLog(@"alipay:callback");
+
+ callback([[NSArray alloc] initWithObjects:resultDic, nil]);
+ }];
+ });
+}
+
+/*!
+ * [warn][tid:main][RCTModuleData.mm:68] Module Alipay requires main queue setup since it overrides `init` but doesn't implement `requiresMainQueueSetup`.
+ * In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.
+ */
++ (BOOL)requiresMainQueueSetup
+{
+ return YES;
}
@end
diff --git a/ios/Alipay.xcodeproj/project.pbxproj b/ios/Alipay.xcodeproj/project.pbxproj
index 3e9cb74..21f444f 100644
--- a/ios/Alipay.xcodeproj/project.pbxproj
+++ b/ios/Alipay.xcodeproj/project.pbxproj
@@ -6,6 +6,10 @@
objectVersion = 46;
objects = {
+/* Begin PBXBuildFile section */
+ B954DB6F24B48377005C7268 /* AlipaySDK in Frameworks */ = {isa = PBXBuildFile; fileRef = B954DB6E24B48377005C7268 /* AlipaySDK */; };
+/* End PBXBuildFile section */
+
/* Begin PBXCopyFilesBuildPhase section */
58B511D91A9E6C8500147676 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
@@ -20,6 +24,8 @@
/* Begin PBXFileReference section */
134814201AA4EA6300B7C361 /* libAlipay.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAlipay.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ B954DB6C24B48352005C7268 /* AlipaySDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = AlipaySDK.bundle; sourceTree = ""; };
+ B954DB6E24B48377005C7268 /* AlipaySDK */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; name = AlipaySDK; path = AlipaySDK.framework/AlipaySDK; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -27,6 +33,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ B954DB6F24B48377005C7268 /* AlipaySDK in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -45,9 +52,19 @@
isa = PBXGroup;
children = (
134814211AA4EA7D00B7C361 /* Products */,
+ B954DB6B24B48352005C7268 /* Frameworks */,
);
sourceTree = "";
};
+ B954DB6B24B48352005C7268 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ B954DB6E24B48377005C7268 /* AlipaySDK */,
+ B954DB6C24B48352005C7268 /* AlipaySDK.bundle */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
diff --git a/ios/Alipay.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Alipay.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/Alipay.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/ios/AlipaySDK.bundle/alipay_msp_back@2x.png b/ios/AlipaySDK.bundle/alipay_msp_back@2x.png
new file mode 100644
index 0000000..4a55816
Binary files /dev/null and b/ios/AlipaySDK.bundle/alipay_msp_back@2x.png differ
diff --git a/ios/AlipaySDK.bundle/alipay_msp_refresh@2x.png b/ios/AlipaySDK.bundle/alipay_msp_refresh@2x.png
new file mode 100644
index 0000000..767d84c
Binary files /dev/null and b/ios/AlipaySDK.bundle/alipay_msp_refresh@2x.png differ
diff --git a/ios/AlipaySDK.bundle/bar@2x.png b/ios/AlipaySDK.bundle/bar@2x.png
new file mode 100644
index 0000000..9f5fa56
Binary files /dev/null and b/ios/AlipaySDK.bundle/bar@2x.png differ
diff --git a/ios/AlipaySDK.bundle/bridge.js b/ios/AlipaySDK.bundle/bridge.js
new file mode 100644
index 0000000..0d37a94
--- /dev/null
+++ b/ios/AlipaySDK.bundle/bridge.js
@@ -0,0 +1 @@
+!function(){if(!window.AlipayJSBridge){window.alipayjsbridgeSetTitle=function(e){document.title=e,t("alipayjsbridge://setTitle?title="+encodeURIComponent(e))},window.alipayjsbridgeRefresh=function(){t("alipayjsbridge://onRefresh?")},window.alipayjsbridgeBack=function(){t("alipayjsbridge://onBack?")},window.alipayjsbridgeExit=function(e){t("alipayjsbridge://onExit?bsucc="+e)},window.alipayjsbridgeShowBackButton=function(e){t("alipayjsbridge://showBackButton?bshow="+e)},window.AlipayJSBridge={version:"2.0",addListener:function(e,i){a[e]=i},hasListener:function(e){if(!a[e])return!1;return!0},callListener:function(e,i,n){var t;n&&(t=function(e){var i="";e&&(i=encodeURIComponent(JSON.stringify(e)));var a="func=h5JsFuncCallback&cbId="+n+"&data="+i;o(a)});var r=a[e];r?r(i,t):console.log("AlipayJSBridge: no h5JsFunc ",e+i)},callNativeFunc:function(e,a,t){var r="";t&&(r="cb_"+i+++"_"+(new Date).getTime(),n[r]=t);var d="";a&&(d=encodeURIComponent(JSON.stringify(a)));o("func="+e+"&cbId="+r+"&data="+d)},callBackFromNativeFunc:function(e,i){var a=n[e];a&&(a(i),delete n[i])}};var e,i=1,n={},a={};window.CustomEvent?e=new CustomEvent("alipayjsbridgeready"):(e=document.createEvent("Event")).initEvent("alipayjsbridgeready",!0,!0),document.dispatchEvent(e),setTimeout(function(){if(window.AlipayJSBridgeInitArray){var e=window.AlipayJSBridgeInitArray;delete window.AlipayJSBridgeInitArray;for(var i=0;i
+
+@class AFServiceResponse;
+
+/**
+ SDK支持的业务枚举值
+
+ - AFServiceEInvoice: 电子发票
+ - AFServiceAuth: 账户授权
+ */
+typedef NS_ENUM(NSUInteger, AFService) {
+ AFServiceEInvoice,
+ AFServiceAuth,
+ AFServiceDeduct
+};
+
+
+extern NSString * const kAFServiceOptionBizParams; // 钱包服务调用入参
+extern NSString * const kAFServiceOptionCallbackScheme; // 业务回跳当前app的scheme
+extern NSString * const kAFServiceOptionNotUseLanding; // 不使用支付宝提示下载页做补偿,为true时需要商户自己处理用户未安装支付宝的情况
+extern NSString * const kAFServiceBizParamsKeyUrl; // 独立签约入参url
+
+typedef void(^AFServiceResultBlock)(AFServiceResponse *response);
+
+@interface AFServiceCenter : NSObject
+
+/**
+ 调用钱包服务
+
+ @param service 业务service, 见AFService枚举值
+ @param params 参数Dictionary, key值详情参见kAFServiceOptionBizParams、kAFServiceOptionCallbackScheme注释
+ @param block 业务结果回调的block, block参数是AFServiceResponse类型,业务结果通过result属性获取,如果未用户未安装支付宝并且kAFServiceOptionNotUseLanding未设置为true,会使用H5landing页做补偿,这种情况下不会有block回调结果。
+ */
++ (void)callService:(AFService)service
+ withParams:(NSDictionary *)params
+ andCompletion:(AFServiceResultBlock)block;
+
+
+/**
+ 处理钱包服务回跳APP的URL
+
+ @param url 回跳URL
+ @param block 业务结果回掉的block,详情见调用接口入参上的block。注意此接口上的block只有在跳转钱包后,当前APP被系统回收的情况下回跳才生效
+ */
++ (void)handleResponseURL:(NSURL *)url
+ withCompletion:(AFServiceResultBlock)block;
+
+@end
diff --git a/ios/AlipaySDK.framework/Headers/AFServiceResponse.h b/ios/AlipaySDK.framework/Headers/AFServiceResponse.h
new file mode 100644
index 0000000..801fbf8
--- /dev/null
+++ b/ios/AlipaySDK.framework/Headers/AFServiceResponse.h
@@ -0,0 +1,43 @@
+//
+// AFServiceResponse.h
+// AFServiceSDK
+//
+// Created by jiajunchen on 08/01/2018.
+// Copyright © 2018 antfin. All rights reserved.
+//
+
+#import
+
+/**
+ 钱包服务调用结果状态吗
+
+ - AFResSuccess: 默认值,业务调用成功,结果数据参见result字段
+ - AFResInvalidService: service枚举值错误
+ - AFResInvalidURL: 钱包回跳URL错误
+ - AFResRepeatCall: 业务重复调用(3s内)
+ - AFResOpenURLErr: 跳转失败
+ */
+typedef NS_ENUM(NSUInteger, AFResCode) {
+ AFResSuccess = 0,
+ AFResInvalidService = 100,
+ AFResInvalidURL,
+ AFResRepeatCall,
+ AFResOpenURLErr,
+};
+
+
+@interface AFServiceResponse : NSObject
+
+
+/**
+ 业务调用状态吗
+ */
+@property (nonatomic, assign) AFResCode responseCode;
+
+
+/**
+ 业务结果Dictionary, 内容请参考具体业务方接入文档
+ */
+@property (readonly) NSDictionary *result;
+
+@end
diff --git a/ios/AlipaySDK.framework/Headers/APayAuthInfo.h b/ios/AlipaySDK.framework/Headers/APayAuthInfo.h
new file mode 100644
index 0000000..afab31e
--- /dev/null
+++ b/ios/AlipaySDK.framework/Headers/APayAuthInfo.h
@@ -0,0 +1,33 @@
+//
+// APAuthInfo.h
+// APAuth
+//
+// Created by antfin on 17-10-24.
+// Copyright (c) 2017年 AntFin. All rights reserved.
+//
+
+#import
+
+@interface APayAuthInfo : NSObject
+
+@property(nonatomic, copy)NSString *appID;
+@property(nonatomic, copy)NSString *pid;
+@property(nonatomic, copy)NSString *redirectUri;
+
+/**
+ * 初始化AuthInfo
+ *
+ * @param appIDStr 应用ID
+ * @param pidStr 商户ID 可不填
+ * @param uriStr 授权的应用回调地址 比如:alidemo://auth
+ *
+ * @return authinfo实例
+ */
+- (id)initWithAppID:(NSString *)appIDStr
+ pid:(NSString *)pidStr
+ redirectUri:(NSString *)uriStr;
+
+- (NSString *)description;
+- (NSString *)wapDescription;
+
+@end
diff --git a/ios/AlipaySDK.framework/Headers/AlipaySDK.h b/ios/AlipaySDK.framework/Headers/AlipaySDK.h
new file mode 100644
index 0000000..5d8d89e
--- /dev/null
+++ b/ios/AlipaySDK.framework/Headers/AlipaySDK.h
@@ -0,0 +1,223 @@
+//
+// AlipaySDK.h
+// AlipaySDK
+//
+// Created by antfin on 17-10-24.
+// Copyright (c) 2017年 AntFin. All rights reserved.
+//
+
+
+////////////////////////////////////////////////////////
+///////////////// 支付宝标准版本支付SDK ///////////////////
+///////// version:15.7.7 motify:2020.07.02///////////
+////////////////////////////////////////////////////////
+
+#import
+#import "APayAuthInfo.h"
+#import "AFServiceCenter.h"
+#import "AFServiceResponse.h"
+
+typedef void(^CompletionBlock)(NSDictionary *resultDic);
+
+typedef enum {
+ ALIPAY_TIDFACTOR_IMEI,
+ ALIPAY_TIDFACTOR_IMSI,
+ ALIPAY_TIDFACTOR_TID,
+ ALIPAY_TIDFACTOR_CLIENTKEY,
+ ALIPAY_TIDFACTOR_VIMEI,
+ ALIPAY_TIDFACTOR_VIMSI,
+ ALIPAY_TIDFACTOR_CLIENTID,
+ ALIPAY_TIDFACTOR_APDID,
+ ALIPAY_TIDFACTOR_MAX
+} AlipayTidFactor;
+
+@interface AlipaySDK : NSObject
+
+/**
+ * 创建支付单例服务
+ *
+ * @return 返回单例对象
+ */
++ (AlipaySDK *)defaultService;
+
+/**
+ * 用于设置SDK使用的window,如果没有自行创建window无需设置此接口
+ */
+@property (nonatomic, weak) UIWindow *targetWindow;
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////支付宝支付相关接口/////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * 支付接口
+ *
+ * @param orderStr 支付订单信息字串
+ * @param schemeStr 调用支付的app注册在info.plist中的scheme
+ * @param completionBlock 支付结果回调Block,用于wap支付结果回调
+ 跳转支付宝支付时只有当processOrderWithPaymentResult接口的completionBlock为nil时会使用这个bolock
+ */
+- (void)payOrder:(NSString *)orderStr
+ fromScheme:(NSString *)schemeStr
+ callback:(CompletionBlock)completionBlock;
+
+/**
+ * 支付接口 v2
+ *
+ * @param orderStr 支付订单信息字串
+ * @param dynamicLaunch 是否使用动态配置策略跳转支付宝支付
+ * @param schemeStr 调用支付的app注册在info.plist中的scheme
+ * @param completionBlock 支付结果回调Block,用于wap支付结果回调
+ 跳转支付宝支付时只有当processOrderWithPaymentResult接口的completionBlock为nil时会使用这个bolock
+ */
+- (void)payOrder:(NSString *)orderStr
+ dynamicLaunch:(BOOL)dynamicLaunch
+ fromScheme:(NSString *)schemeStr
+ callback:(CompletionBlock)completionBlock;
+
+/**
+ * 处理支付宝app支付后跳回商户app携带的支付结果Url
+ *
+ * @param resultUrl 支付宝app返回的支付结果url
+ * @param completionBlock 支付结果回调 为nil时默认使用支付接口的completionBlock
+ */
+- (void)processOrderWithPaymentResult:(NSURL *)resultUrl
+ standbyCallback:(CompletionBlock)completionBlock;
+
+/**
+ * 获取交易token。
+ *
+ * @return 交易token,若无则为空。
+ */
+- (NSString *)fetchTradeToken;
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////支付宝授权 2.0 相关接口////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * 快登授权2.0
+ *
+ * @param infoStr 授权请求信息字串
+ * @param schemeStr 调用授权的app注册在info.plist中的scheme
+ * @param completionBlock 授权结果回调,需要调用方在appDelegate中调用processAuth_V2Result:standbyCallback:方法获取授权结果
+ * 若在授权过程中,调用方应用被系统终止则此block无效(此时会调用'processAuth_V2Result:standbyCallback:'传入的standbyCallback)
+ */
+- (void)auth_V2WithInfo:(NSString *)infoStr
+ fromScheme:(NSString *)schemeStr
+ callback:(CompletionBlock)completionBlock;
+
+/**
+ * 处理支付宝app授权后跳回商户app携带的授权结果Url
+ *
+ * @param resultUrl 支付宝app返回的授权结果url
+ * @param completionBlock 授权结果回调,用于处理跳转支付宝授权过程中商户APP被系统终止的情况
+ */
+- (void)processAuth_V2Result:(NSURL *)resultUrl
+ standbyCallback:(CompletionBlock)completionBlock;
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////支付宝授权 1.0 相关接口////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * 快登授权
+ * @param authInfo 授权相关信息
+ * @param completionBlock 授权结果回调,若在授权过程中,调用方应用被系统终止,则此block无效,
+ 需要调用方在appDelegate中调用processAuth_V2Result:standbyCallback:方法获取授权结果
+ */
+- (void)authWithInfo:(APayAuthInfo *)authInfo
+ callback:(CompletionBlock)completionBlock;
+
+/**
+ * 处理支付宝app授权后跳回商户app携带的授权结果Url
+ *
+ * @param resultUrl 支付宝app返回的授权结果url
+ * @param completionBlock 授权结果回调
+ */
+- (void)processAuthResult:(NSURL *)resultUrl
+ standbyCallback:(CompletionBlock)completionBlock;
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////支付宝 h5 支付转 native 支付接口////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+/**
+ * 从h5链接中获取订单串并支付接口(自版本15.4.0起,推荐使用该接口)
+ *
+ * @param urlStr 拦截的 url string
+ *
+ * @return YES为成功获取订单信息并发起支付流程;NO为无法获取订单信息,输入url是普通url
+ */
+- (BOOL)payInterceptorWithUrl:(NSString *)urlStr
+ fromScheme:(NSString *)schemeStr
+ callback:(CompletionBlock)completionBlock;
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////支付宝 tid 相关信息获取接口/////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * 获取当前tid相关信息
+ *
+ * @return tid相关信息
+ */
+- (NSString*)queryTidFactor:(AlipayTidFactor)factor;
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////支付宝支付环境相关信息接口//////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * 是否已经使用过
+ *
+ * @return YES为已经使用过,NO反之
+ */
+- (BOOL)isLogined;
+
+/**
+ * 获取当前版本号
+ *
+ * @return 当前版本字符串
+ */
+- (NSString *)currentVersion;
+
+/**
+ * 測試所用,realse包无效
+ *
+ * @param url 测试环境
+ */
+- (void)setUrl:(NSString *)url;
+
+/**
+ * 支付前主动更新本地配置
+ *
+ * @param block 更新请求结果回调
+ */
+- (void)fetchSdkConfigWithBlock:(void(^)(BOOL success))block;
+
+
+typedef void(^APLogBlock)(NSString *log);
+
+/**
+* 接收AlipaySDK的log信息
+*
+* @param logBlock 打印log的回调block
+*/
++ (void)startLogWithBlock:(APLogBlock)logBlock;
+
+/**
+* 停止输出log,会释放logBlock
+*
+*
+*/
++ (void)stopLog;
+
+@end
diff --git a/react-native-uiwjs-alipay.podspec b/react-native-uiwjs-alipay.podspec
index a6c56fd..b366c1b 100644
--- a/react-native-uiwjs-alipay.podspec
+++ b/react-native-uiwjs-alipay.podspec
@@ -22,6 +22,8 @@ Pod::Spec.new do |s|
s.requires_arc = true
s.dependency "React"
+ s.dependency "AlipaySDK-iOS"
+ s.library = "c++", "z"
# ...
# s.dependency "..."
end