expo-native-alipay+0.1.1.patch 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. diff --git a/node_modules/expo-native-alipay/ios/ExpoNativeAlipayDelegate.swift b/node_modules/expo-native-alipay/ios/ExpoNativeAlipayDelegate.swift
  2. index d5c3506..331addd 100644
  3. --- a/node_modules/expo-native-alipay/ios/ExpoNativeAlipayDelegate.swift
  4. +++ b/node_modules/expo-native-alipay/ios/ExpoNativeAlipayDelegate.swift
  5. @@ -9,34 +9,17 @@ import ExpoModulesCore
  6. import AlipaySDK
  7. public class ExpoNativeAlipayDelegate: ExpoAppDelegateSubscriber {
  8. - // 适配 iOS 9 及以上
  9. - public func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:], appContext: AppContext?) -> Bool {
  10. + // 适配标准 UIApplicationDelegate (3 参数签名,匹配 ExpoAppDelegateSubscriberManager 的调用)
  11. + public func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  12. if url.host == "safepay" {
  13. // 支付跳转支付宝钱包进行支付,处理支付结果
  14. AlipaySDK.defaultService()?.processOrder(withPaymentResult: url, standbyCallback: { resultDic in
  15. - self.sendAlipayResult(resultDic, appContext: appContext)
  16. + self.sendAlipayResult(resultDic)
  17. })
  18. // 授权跳转支付宝钱包进行支付,处理支付结果
  19. AlipaySDK.defaultService()?.processAuth_V2Result(url, standbyCallback: { resultDic in
  20. - self.sendAlipayResult(resultDic, appContext: appContext)
  21. - })
  22. - return true
  23. - }
  24. - return false
  25. - }
  26. -
  27. - // 兼容 iOS 8 及以下(如需支持)
  28. - public func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any, appContext: AppContext?) -> Bool {
  29. - if url.host == "safepay" {
  30. - // 支付跳转支付宝钱包进行支付,处理支付结果
  31. - AlipaySDK.defaultService()?.processOrder(withPaymentResult: url, standbyCallback: { resultDic in
  32. - self.sendAlipayResult(resultDic, appContext: appContext)
  33. - })
  34. -
  35. - // 授权跳转支付宝钱包进行支付,处理支付结果
  36. - AlipaySDK.defaultService()?.processAuth_V2Result(url, standbyCallback: { resultDic in
  37. - self.sendAlipayResult(resultDic, appContext: appContext)
  38. + self.sendAlipayResult(resultDic)
  39. })
  40. return true
  41. }
  42. @@ -44,36 +27,26 @@ public class ExpoNativeAlipayDelegate: ExpoAppDelegateSubscriber {
  43. }
  44. // 处理 Universal Link 回调
  45. - public func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void, appContext: AppContext?) -> Bool {
  46. + public func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  47. if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
  48. AlipaySDK.defaultService()?.handleOpenUniversalLink(userActivity, standbyCallback: { resultDic in
  49. - self.sendAlipayResult(resultDic, appContext: appContext)
  50. + self.sendAlipayResult(resultDic)
  51. })
  52. }
  53. return true
  54. }
  55. - private func sendAlipayResult(_ resultDic: [AnyHashable: Any]?, appContext: AppContext?) {
  56. - var module: ExpoNativeAlipayModule? = nil
  57. -
  58. - if let appContext = appContext {
  59. - // 新版优先
  60. - if let moduleRegistry = appContext.value(forKey: "moduleRegistry") as? NSObject,
  61. - let m = moduleRegistry.perform(NSSelectorFromString("getModuleImplementingProtocol:"), with: ExpoNativeAlipayModule.self)?.takeUnretainedValue() as? ExpoNativeAlipayModule {
  62. - module = m
  63. - } else if let m = appContext.perform(NSSelectorFromString("getModule:"), with: ExpoNativeAlipayModule.self)?.takeUnretainedValue() as? ExpoNativeAlipayModule {
  64. - // 旧版
  65. - module = m
  66. - }
  67. + private func sendAlipayResult(_ resultDic: [AnyHashable: Any]?) {
  68. + guard let module = ExpoNativeAlipayModule.shared else {
  69. + print("[ExpoNativeAlipay] WARNING: Module.shared is nil, cannot resolve pay promise!")
  70. + return
  71. }
  72. - if let module = module {
  73. - // 判断是支付还是授权,根据 resultDic 内容区分
  74. - if let result = resultDic?["result"] as? String, result.contains("auth_code=") {
  75. - module.handleAlipayAuthResult(resultDic ?? [:])
  76. - } else {
  77. - module.handleAlipayResult(resultDic ?? [:])
  78. - }
  79. + // 判断是支付还是授权,根据 resultDic 内容区分
  80. + if let result = resultDic?["result"] as? String, result.contains("auth_code=") {
  81. + module.handleAlipayAuthResult(resultDic ?? [:])
  82. + } else {
  83. + module.handleAlipayResult(resultDic ?? [:])
  84. }
  85. }
  86. }
  87. \ No newline at end of file
  88. diff --git a/node_modules/expo-native-alipay/ios/ExpoNativeAlipayModule.swift b/node_modules/expo-native-alipay/ios/ExpoNativeAlipayModule.swift
  89. index 2d925ec..a72ae4e 100644
  90. --- a/node_modules/expo-native-alipay/ios/ExpoNativeAlipayModule.swift
  91. +++ b/node_modules/expo-native-alipay/ios/ExpoNativeAlipayModule.swift
  92. @@ -2,6 +2,7 @@ import ExpoModulesCore
  93. import AlipaySDK
  94. public class ExpoNativeAlipayModule: Module {
  95. + public static var shared: ExpoNativeAlipayModule?
  96. private var alipayScheme: String?
  97. private var payPromise: Promise?
  98. private var authPromise: Promise?
  99. @@ -10,6 +11,11 @@ public class ExpoNativeAlipayModule: Module {
  100. public func definition() -> ModuleDefinition {
  101. Name("ExpoNativeAlipay")
  102. +
  103. + OnCreate {
  104. + ExpoNativeAlipayModule.shared = self
  105. + }
  106. +
  107. /**
  108. * 注册接口
  109. *
  110. @@ -46,6 +52,17 @@ public class ExpoNativeAlipayModule: Module {
  111. let version = AlipaySDK.defaultService()?.currentVersion() ?? ""
  112. promise.resolve(version)
  113. }
  114. +
  115. + AsyncFunction("processOrder") { (urlStr: String, promise: Promise) in
  116. + if let url = URL(string: urlStr) {
  117. + AlipaySDK.defaultService()?.processOrder(withPaymentResult: url, standbyCallback: { resultDic in
  118. + self.handleAlipayResult(resultDic ?? [:])
  119. + promise.resolve(resultDic)
  120. + })
  121. + } else {
  122. + promise.resolve(nil)
  123. + }
  124. + }
  125. }
  126. // 处理支付结果
  127. diff --git a/node_modules/expo-native-alipay/src/ExpoNativeAlipay.types.ts b/node_modules/expo-native-alipay/src/ExpoNativeAlipay.types.ts
  128. index 0969717..310aeec 100644
  129. --- a/node_modules/expo-native-alipay/src/ExpoNativeAlipay.types.ts
  130. +++ b/node_modules/expo-native-alipay/src/ExpoNativeAlipay.types.ts
  131. @@ -48,6 +48,11 @@ export interface OrderResultStr {
  132. sign_type: 'RSA2' | 'RSA';
  133. }
  134. +/**
  135. + * 处理外部跳转回来的支付宝 URL (主要是为了给拦截了 URL 的框架手动处理用)
  136. + */
  137. +export declare function processOrder(url: string): Promise<OrderResult>;
  138. +
  139. /**
  140. * 支付订单返回结果
  141. * @returns 成功返回
  142. diff --git a/node_modules/expo-native-alipay/src/ExpoNativeAlipayModule.ts b/node_modules/expo-native-alipay/src/ExpoNativeAlipayModule.ts
  143. index 2f22a8f..03dead7 100644
  144. --- a/node_modules/expo-native-alipay/src/ExpoNativeAlipayModule.ts
  145. +++ b/node_modules/expo-native-alipay/src/ExpoNativeAlipayModule.ts
  146. @@ -60,6 +60,14 @@ export function getVersion(): Promise<string> {
  147. return ExpoNativeAlipay.getVersion()
  148. }
  149. +/**
  150. + * 手动处理外部唤起返回的支付 URL
  151. + * @param url App 唤起的 URL
  152. + */
  153. +export function processOrder(url: string): Promise<OrderResult> {
  154. + return ExpoNativeAlipay.processOrder(url)
  155. +}
  156. +
  157. /**
  158. * 设置支付宝跳转Scheme,仅 iOS
  159. * @param scheme
  160. diff --git a/node_modules/expo-native-alipay/src/index.ts b/node_modules/expo-native-alipay/src/index.ts
  161. index 1a1b5d0..3e7f3cb 100644
  162. --- a/node_modules/expo-native-alipay/src/index.ts
  163. +++ b/node_modules/expo-native-alipay/src/index.ts
  164. @@ -1,4 +1,5 @@
  165. // Reexport the native module. On web, it will be resolved to ExpoNativeAlipayModule.web.ts
  166. // and on native platforms to ExpoNativeAlipayModule.ts
  167. export * from './ExpoNativeAlipay.types';
  168. -export { authInfo, default, getVersion, alipay, setAlipaySandbox, setAlipayScheme } from './ExpoNativeAlipayModule';
  169. +export { alipay, authInfo, default, getVersion, processOrder, setAlipaySandbox, setAlipayScheme } from './ExpoNativeAlipayModule';
  170. +