第三方支付

在使用第三方支付之前,需要先配置manifest.json

  1. {
  2. "app-plus" : {
  3. "distribute" : {
  4. "sdkConfigs" : {
  5. "payment" : {
  6. "alipay" : {},
  7. "weixin" : {
  8. "appid" : "your appid",
  9. "UniversalLinks" : ""
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }

或者直接在HBuilder中可视化配置:

📃 uniapp第三方支付、登录 - 图1

一个uni-app的支付示例如下:

  1. <template>
  2. <view>
  3. <button @click="requestPayment('alipay')">支付宝支付</button>
  4. <button @click="requestPayment('wxpay')">微信支付</button>
  5. </view>
  6. </template>
  7. <script>
  8. export default {
  9. methods: {
  10. requestPayment(provider) {
  11. uni.getProvider({
  12. service: 'payment',
  13. success: function (res) {
  14. console.log(res);
  15. if (~res.provider.indexOf(provider)) {
  16. uni.requestPayment({
  17. provider: provider,
  18. orderInfo: 'orderInfo', //微信、支付宝订单数据
  19. success: function (res) {
  20. console.log('success:' + JSON.stringify(res));
  21. },
  22. fail: function (err) {
  23. console.log('fail:' + JSON.stringify(err));
  24. }
  25. });
  26. }
  27. }
  28. });
  29. }
  30. }
  31. }
  32. </script>

通过uni.requestPayment唤起支付,需要在唤起支付前获取相应的支付参数(orderInfo),以及配置provider,需要先通过uni.getProvider检测是否支持对应的支付方式。

微信支付参数(orderInfo)如下:

📃 uniapp第三方支付、登录 - 图2

支付宝支付参数(orderInfo)如下:

📃 uniapp第三方支付、登录 - 图3

其中provider取值如下:

  • alipay 支付宝支付
  • wxpay 微信支付
  • baidu 百度收银台
  • appleiap 苹果应用内支付

第三方登录

一个uni-app的第三方登录示例如下:

  1. <template>
  2. <view>
  3. <button @click="oauth('qq')">QQ登录</button>
  4. <button @click="oauth('weixin')">微信登录</button>
  5. <button @click="oauth('sinaweibo')">微博登录</button>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. methods: {
  11. oauth(provider) {
  12. uni.getProvider({
  13. service: 'oauth',
  14. success: function (res) {
  15. console.log(res);
  16. if (~res.provider.indexOf(provider)) {
  17. uni.login({
  18. provider: provider,
  19. success: function (loginRes) {
  20. console.log(JSON.stringify(loginRes));
  21. }
  22. });
  23. }
  24. }
  25. });
  26. }
  27. }
  28. }
  29. </script>

同样地,在调取登录之前,需要先通过uni.getProvider检测是否拥有对应的登录方式。

其中provider取值如下:

  • weixin 微信登录
  • qq QQ登录
  • sinaweibo 新浪微博登录
  • xiaomi 小米登录
  • apple Apple登录

原生Android工程的配置

如果是离线打包,需要进行如下配置

支付宝支付

  1. 需要引入工程的jar/aar文件

需要将以下jar/aar文件(下载地址点这里)放到工程的libs目录下

路径 文件
SDK\libs payment-alipay-release.aar, alipayutdid.jar, alipaySdk-15.6.5-20190718211159-noUtdid.aarr
  1. AndroidManifest.xml中配置

application节点前:

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  4. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  6. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  1. dcloud_properties.xml中添加:
  1. <feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl">
  2. <module name="AliPay" value="io.dcloud.feature.payment.alipay.AliPay"/>
  3. </feature>

微信支付

  1. 申请appkey,详情查看微信appkey申请方法
  2. 需要引入工程的jar/aar文件

需要将以下jar/aar文件(下载地址点这里)放到工程的libs目录下

路径 文件
SDK\libs payment-weixin-release.aar, wechat-sdk-android-with-mta-5.1.4.jar
  1. WXPayEntryActivity.java添加到$你的包名.wxapi下,内容如下(注意将包名改为自己的):
  1. package com.xiaoyulive.test.wxapi;
  2. import io.dcloud.feature.payment.weixin.AbsWXPayCallbackActivity;
  3. public class WXPayEntryActivity extends AbsWXPayCallbackActivity{
  4. }
  1. AndroidManifest.xml中配置

application节点前:

  1. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

application节点下:

  1. <meta-data android:name="WX_APPID" android:value="$微信APPID" />
  2. <meta-data android:name="WX_SECRET" android:value="$微信SECRET"/>
  3. <activity
  4. android:name="$你的包名.wxapi.WXPayEntryActivity"
  5. android:exported="true"
  6. android:theme="@android:style/Theme.Translucent.NoTitleBar"
  7. android:launchMode="singleTop" />
  1. dcloud_properties.xml中添加:
  1. <feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl">
  2. <module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/>
  3. </feature>

参考资料