提交 7e0c4a1c 编写于 作者: H HRK

Merge branch 'master' of https://gitcode.net/dcloud/unidocs-zh

......@@ -45,7 +45,7 @@ export default {
},
{
subTitle: 'uni-pay',
url: 'https://uniapp.dcloud.net.cn/uniCloud/unipay',
url: 'https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html',
},
{
subTitle: 'uni-push',
......
......@@ -137,7 +137,9 @@
* [获取服务供应商](plugins/provider.md)
* [登录](plugins/login.md)
* [分享](plugins/share.md)
* [支付](plugins/payment.md)
* 支付```{"collapsable": true}```
* [requestPayment](plugins/payment.md)
* [requestVirtualPayment](plugins/virtualPayment.md)
* [推送](plugins/push.md)
* [语音](plugins/voice.md)
* [实人认证](plugins/facialRecognitionVerify.md)
......
......@@ -9,9 +9,9 @@ uni.requestPayment是一个统一各平台的客户端支付API,不管是在
比如微信有App支付、小程序支付、H5支付等不同的申请入口和使用流程,对应到uni-app,在App端要申请微信的App支付,而小程序端则申请微信的小程序支付。
如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),那么官方提供了[uniPay](https://uniapp.dcloud.io/uniCloud/unipay)云端统一支付服务,把App、微信小程序、支付宝小程序里的服务端支付开发进行了统一的封装。
如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),那么官方提供了[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)云端统一支付服务,把App、微信小程序、支付宝小程序里的服务端支付开发进行了统一的封装。
前端统一的`uni.requestPayment`和云端统一的`uniPay`搭配,可以极大提升支付业务的开发效率,强烈推荐给开发者使用。`uniPay`的文档另见:[https://uniapp.dcloud.io/uniCloud/unipay](https://uniapp.dcloud.io/uniCloud/unipay)
前端统一的`uni.requestPayment`和云端统一的`uniPay`搭配,可以极大提升支付业务的开发效率,强烈推荐给开发者使用。`uniPay`的文档另见:[https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)
**平台差异说明**
......@@ -695,8 +695,8 @@ uni.requestPayment({
## 服务器相关
### uniCloud开发
- 前端:使用`unicloud.callfunction`调用指定的云函数
- 服务端:使用[uniPay](https://uniapp.dcloud.io/uniCloud/unipay),该服务对应的演示工程在插件市场:[https://ext.dcloud.net.cn/plugin?id=1835](https://ext.dcloud.net.cn/plugin?id=1835),此示例为完整的前后端支付演示,使用`uniPay`可极快的完成支付业务开发。
- 前端:使用 `uni-pay` 组件发起支付
- 服务端:使用[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html),该服务对应的演示工程在插件市场:[https://ext.dcloud.net.cn/plugin?id=1835](https://ext.dcloud.net.cn/plugin?id=1835),此示例为完整的前后端支付演示,使用`uniPay`可极快的完成支付业务开发。
### php开发
- 前端:使用 ``uni.request`` 请求服务端接口,得到订单数据,使用 ``uni.requestPayment`` 向支付平台发起支付请求,拉起支付平台的客户端进行支付。在hello uni-app里详细代码。
......
# uni.requestVirtualPayment(OBJECT)
**概述**
微信规定上架**短剧**类目的小程序必须使用微信小程序虚拟支付,不可以使用原先的微信支付
**注意**
1. 微信小程序虚拟支付只有短剧类目的小程序才能开通
2. 微信小程序虚拟支付不支持ios系统
3. 微信小程序虚拟支付有较高的手续费(已知目前为10% ~ 20%),由微信官方收取,非uni-app收取(手续费多少跟使用uni-app无关)
**如何开户?**
- [微信虚拟支付官方文档](https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html#_1-%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D)
如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),那么官方提供了[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)云端统一支付服务,把App、微信小程序、支付宝小程序里的服务端支付开发进行了统一的封装。
前端统一的 `uni.requestVirtualPayment` 和云端统一的 `uniPay` 搭配,可以极大提升支付业务的开发效率,强烈推荐给开发者使用。`uniPay` 的文档另见:[https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)
**平台差异说明**
|App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|飞书小程序|QQ小程序|快手小程序|京东小程序|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|x|x|√|x|x|x|x|x|x|x|
**OBJECT 参数说明**
|参数名|类型|必填|说明|平台差异说明|
|:-|:-|:-|:-|:-|
|signData|Object|是|具体支付参数见signData|微信小程序|
|mode|String|是|支付的类型, 不同的支付类型有各自额外要传的附加参数|微信小程序|
|paySig|String|是|支付签名, 详见[《签名详解》](https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html)|微信小程序|
|signature|String|是|用户态签名, 详见[《签名详解》](https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html)|微信小程序|
|success|Function|否|接口调用成功的回调||
|fail|Function|否|接口调用失败的回调函数||
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)||
`signData` 说明
|结构属性|类型|必填|说明|
|:-|:-|:-|:-|
|offerId|String|是|在米大师侧申请的应用 id, mp-支付基础配置中的offerid|
|buyQuantity|Number|是|购买数量|
|currencyType|String|是|币种 固定为 CNY|
|outTradeNo|String|是|业务订单号, 每个订单号只能使用一次, 重复使用会失败(极端情况不保证唯一, 不建议业务强依赖唯一性). 要求8-32个字符内, 只能是数字、大小写字母、符号 _-*@组成, 不能以下划线 _ 开头|
|attach|String|是|透传数据, 发货通知时会透传给开发者|
|productId|String|否|道具ID, **该字段仅mode=short_series_goods时需要必填**|
|goodsPrice|String|否|道具单价(分), **该字段仅mode=short_series_goods时需要必填**, 用来校验价格与后台道具价格是否一致, 避免用户在业务商城页看到的价格与实际价格不一致导致投诉|
|env|Number|否|环境配置, 0 米大师正式环境, 1 米大师沙箱环境, 默认为 0|
`mode` 说明
|合法值 |说明 |
|:-|:-|
|short_series_goods |道具直购 |
|short_series_coin| 代币充值 |
## 代码示例
### 代币充值
```javascript
// 仅作为示例,非真实参数信息。
uni.requestVirtualPayment({
signData: {
offerId: "", // 在米大师侧申请的应用 id, mp-支付基础配置中的offerid
buyQuantity: 1, // 购买数量
env: 0, // 环境配置, 0 米大师正式环境, 1 米大师沙箱环境, 默认为 0
currencyType: "CNY", // 固定CNY
outTradeNo: "test2024030101",
attach: JSON.stringify({
user_id: "001"
})
},
mode: "short_series_coin",
paySig: "支付签名",
signature: '用户态签名',
success: (res) => {
console.log('success:' + JSON.stringify(res));
},
fail: (err) => {
console.log('fail:' + JSON.stringify(err));
},
complete: (res) => {
console.log('complete:' + JSON.stringify(res));
}
});
```
### 道具直购
```javascript
// 仅作为示例,非真实参数信息。
uni.requestVirtualPayment({
signData: {
offerId: "", // 在米大师侧申请的应用 id, mp-支付基础配置中的offerid
buyQuantity: 1, // 购买数量
env: 0, // 环境配置, 0 米大师正式环境, 1 米大师沙箱环境, 默认为 0
currencyType: "CNY", // 固定CNY
outTradeNo: "test2024030101",
attach: JSON.stringify({
user_id: "001"
}),
productId: "", // 道具ID, **该字段仅mode=short_series_goods时需要必填**
goodsPrice: 1, // 道具单价(分), **该字段仅mode=short_series_goods时需要必填**, 用来校验价格与后台道具价格是否一致, 避免用户在业务商城页看到的价格与实际价格不一致导致投诉
},
mode: "short_series_coin",
paySig: "支付签名",
signature: '用户态签名',
success: (res) => {
console.log('success:' + JSON.stringify(res));
},
fail: (err) => {
console.log('fail:' + JSON.stringify(err));
},
complete: (res) => {
console.log('complete:' + JSON.stringify(res));
}
});
```
## 服务器相关
### uniCloud开发
- 前端:使用 `uni-pay` 组件发起支付。
- 服务端:使用[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html),该服务对应的演示工程在插件市场:[https://ext.dcloud.net.cn/plugin?id=1835](https://ext.dcloud.net.cn/plugin?id=1835),此示例为完整的前后端支付演示,使用`uniPay`可极快的完成支付业务开发。
### php、java等后端语言开发
- 前端:使用 `uni.request` 请求服务端接口,得到订单数据,使用 `uni.requestVirtualPayment` 向支付平台发起支付请求,拉起支付平台的客户端进行支付。
- 服务端:[参考文档](https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/virtual-payment.html)
\ No newline at end of file
#### 4.03.2024031101-alpha
* 【uni-app 插件】
+ Web平台 修复 4.02 引发的 Vue3 项目 .scss 文件条件编译失效的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=912)
* 【uni-app x 插件】
+ 修复 3.98 引发的 pages.json 检查页面文件是否存在时,部分条件编译不生效的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=909)
+ Web平台 调整 运行到浏览器时将script标签内代码编译为可以在低版本浏览器运行的兼容代码
+ App-Android平台 修复 APP-PLUS 条件编译的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=910)
+ App-Android平台 修复 4.02版引出的 组件 button 的 disabled 属性在部分场景设置无效的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=900)
+ App-Android平台 修复 4.02版引出的 组件 button 的对象类型 `UniButtonElement` 编译报错的Bug [详情](https://issues.dcloud.net.cn/pages/issues/detail?id=907)
* 【uniCloud 插件】
+ 修复 3.98版本引发的 cli项目下载云函数或公共模块时无法下载到指定位置的bug
+ 修复 4.02版本引发的 上传公共模块时不会自动安装依赖的bug
+ 优化 4.02版本引发的 uni_modules 插件的 package.json 配置的云厂商与uniCloud目录绑定的云厂商不匹配导致该插件不显示的Bug [详情](https://ask.dcloud.net.cn/question/187371)
#### 4.02.2024030621-alpha
* 【uni-app 插件】
+ App平台 修复 Vue2 Cli 项目 nvue 页面编译报错的Bug [详情](https://ask.dcloud.net.cn/question/186784)
......
......@@ -5,7 +5,7 @@ App端支付模块封装了市场上主流的三方支付平台SDK,提供JS AP
|uni-app|[uni.requestPayment(OBJECT)](/api/plugins/payment.md#requestpayment)|
|5+ App/Wap2App|[plus.payment.*](https://www.html5plus.org/doc/zh_cn/payment.html)
如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),官方提供了[uniPay](https://uniapp.dcloud.io/uniCloud/unipay)云端统一支付服务,极大提升支付业务的开发效率,强烈推荐给开发者使用,参考示例:[https://ext.dcloud.net.cn/plugin?id=1835](https://ext.dcloud.net.cn/plugin?id=1835)
如果服务端使用[uniCloud](https://uniapp.dcloud.io/uniCloud/README),官方提供了[uniPay](https://doc.dcloud.net.cn/uniCloud/uni-pay/uni-app.html)云端统一支付服务,极大提升支付业务的开发效率,强烈推荐给开发者使用,参考示例:[https://ext.dcloud.net.cn/plugin?id=1835](https://ext.dcloud.net.cn/plugin?id=1835)
使用支付功能需在项目manifest.json的“App模块配置”中勾选“Payment(支付)”,并根据项目实际情况勾选使用的三方支付平台:
![](https://native-res.dcloud.net.cn/images/uniapp/payment/modules.png)
......
......@@ -34,10 +34,25 @@
```html
<!-- 广告位 adpid 见邮件内容 -->
<uni-ad adpid="" class="uni-ad"></uni-ad>
<!-- 插屏和激励视频需要调用组件的 show 方法,banner类型不需要 -->
<!-- 插屏广告需要在适合的时机下调用有效 -->
<button bindtap="showAd">显示 激励视频/插屏广告</button>
<!-- 信息流/视频广告 -->
<uni-ad adpid="" class="uni-banner"></uni-ad>
<!-- 插屏和激励视频需要调用组件的show方法,banner,格子类型广告不需要。只有激励视频有error和close事件。 -->
<!-- 激励视频 -->
<uni-ad adpid="" class="uni-rewarded-video-ad" bind:close="onadclose" bind:error="onaderror"></uni-ad>
<button bindtap="showRewardedVideoAd">显示激励视频</button>
<!--
插屏广告需要在适合的时机下调用有效
插屏广告触发频率限制:
1、小程序启动一定时间内不允许展示插屏广告
2、距离小程序插屏广告或者激励视频广告上次播放时间间隔不足,不允许展示插屏广告
3、当前正在播放激励视频广告或者插屏广告,不允许再次展示插屏广告
-->
<uni-ad adpid="" class="uni-interstitial-ad"></uni-ad>
<button bindtap="showInterstitialAd">显示插屏</button>
```
......@@ -45,11 +60,27 @@
```js
Page({
data: {
},
showAd: function (e) {
this._uniAd = this.selectComponent('.uni-ad');
this._uniAd.show();
}
data: {},
showRewardedVideoAd: function (e) {
this.selectComponent('.uni-rewarded-video-ad').show();
},
showInterstitialAd: function (e) {
this.selectComponent('.uni-interstitial-ad').show();
},
onadclose: function(e) {
const detail = e.detail
// 用户点击了【关闭广告】按钮
if (detail && detail.isEnded) {
// 正常播放结束
console.log("onClose-正常播放结束:" + detail.isEnded);
} else {
// 播放中途退出
console.log("onClose-播放中途退出:" + detail.isEnded);
}
},
onaderror: function(e) {
// 广告加载失败
console.log('广告加载失败:', e.detail)
}
})
```
......@@ -1619,14 +1619,6 @@
markdown-it-table-of-contents "^0.4.0"
prismjs "^1.13.0"
"@vuepress/plugin-active-header-links@1.9.7":
version "1.9.7"
resolved "https://registry.yarnpkg.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.9.7.tgz#11b3b148d50ebd0a9a9d9e97aa34d81ae04e7307"
integrity sha512-G1M8zuV9Og3z8WBiKkWrofG44NEXsHttc1MYreDXfeWh/NLjr9q1GPCEXtiCjrjnHZHB3cSQTKnTqAHDq35PGA==
dependencies:
"@vuepress/types" "1.9.7"
lodash.debounce "^4.0.8"
"@vuepress/plugin-active-header-links@1.9.9":
version "1.9.9"
resolved "https://registry.npmmirror.com/@vuepress/plugin-active-header-links/-/plugin-active-header-links-1.9.9.tgz#fad96c550bea0b204fe16266cff1405e8636c1e1"
......@@ -1651,14 +1643,6 @@
"@vuepress/types" "1.9.9"
cross-spawn "^6.0.5"
"@vuepress/plugin-nprogress@1.9.7":
version "1.9.7"
resolved "https://registry.yarnpkg.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.9.7.tgz#76d8368fa26c190ee23c399401a71ec78ffb9744"
integrity sha512-sI148igbdRfLgyzB8PdhbF51hNyCDYXsBn8bBWiHdzcHBx974sVNFKtfwdIZcSFsNrEcg6zo8YIrQ+CO5vlUhQ==
dependencies:
"@vuepress/types" "1.9.7"
nprogress "^0.2.0"
"@vuepress/plugin-nprogress@1.9.9":
version "1.9.9"
resolved "https://registry.npmmirror.com/@vuepress/plugin-nprogress/-/plugin-nprogress-1.9.9.tgz#4fee4818ddc8ddc6a1778b7f2b74ab784c90915d"
......@@ -1675,13 +1659,6 @@
"@vuepress/shared-utils" "1.9.9"
"@vuepress/types" "1.9.9"
"@vuepress/plugin-search@1.9.7":
version "1.9.7"
resolved "https://registry.yarnpkg.com/@vuepress/plugin-search/-/plugin-search-1.9.7.tgz#37a4714973ccac8c28837fc72a38ae0888d874bf"
integrity sha512-MLpbUVGLxaaHEwflFxvy0pF9gypFVUT3Q9Zc6maWE+0HDWAvzMxo6GBaj6mQPwjOqNQMf4QcN3hDzAZktA+DQg==
dependencies:
"@vuepress/types" "1.9.7"
"@vuepress/plugin-search@1.9.9":
version "1.9.9"
resolved "https://registry.npmmirror.com/@vuepress/plugin-search/-/plugin-search-1.9.9.tgz#d30804b86f9b7f54b3db0b987a288433be3cfd7b"
......@@ -1735,22 +1712,6 @@
vuepress-plugin-container "^2.0.2"
vuepress-plugin-smooth-scroll "^0.0.3"
"@vuepress/theme-default@^1.8.2":
version "1.9.7"
resolved "https://registry.yarnpkg.com/@vuepress/theme-default/-/theme-default-1.9.7.tgz#9e928b724fdcb12715cc513fdbc27b965944c4a1"
integrity sha512-NZzCLIl+bgJIibhkqVmk/NSku57XIuXugxAN3uiJrCw6Mu6sb3xOvbk0En3k+vS2BKHxAZ6Cx7dbCiyknDQnSA==
dependencies:
"@vuepress/plugin-active-header-links" "1.9.7"
"@vuepress/plugin-nprogress" "1.9.7"
"@vuepress/plugin-search" "1.9.7"
"@vuepress/types" "1.9.7"
docsearch.js "^2.5.2"
lodash "^4.17.15"
stylus "^0.54.8"
stylus-loader "^3.0.2"
vuepress-plugin-container "^2.0.2"
vuepress-plugin-smooth-scroll "^0.0.3"
"@vuepress/types@1.9.7":
version "1.9.7"
resolved "https://registry.yarnpkg.com/@vuepress/types/-/types-1.9.7.tgz#aeb772fd0f7c2a10c6ec1d3c803a2e4b1d756c24"
......@@ -9255,10 +9216,10 @@ vuepress-plugin-container@^2.0.2:
"@vuepress/shared-utils" "^1.2.0"
markdown-it-container "^2.0.0"
vuepress-plugin-expandable-row@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/vuepress-plugin-expandable-row/-/vuepress-plugin-expandable-row-1.0.0.tgz#9197ebb63c0277ae546c18d83dd7734de2438a7f"
integrity sha512-255rVtGGeRlTYXxjL4RLbsHfF9Q9fIZH5tIx4BPjYjk5AkULQKE16IekJ+A4mlsH7T944k/2jvxaE1zRy/w5SA==
vuepress-plugin-expandable-row@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/vuepress-plugin-expandable-row/-/vuepress-plugin-expandable-row-1.0.3.tgz#ea5ba27a48d8b0cfa5eecd4a6c0d0d3411bd6737"
integrity sha512-BGAd+Wex84XAdf8SEAv0y1b/8YhNst3XnqLei/WkVT7j/lD4Wb+NRhX2OGFfaBkemcSk219goH12DGmaOvTiOg==
vuepress-plugin-juejin-style-copy@^1.0.4:
version "1.0.4"
......@@ -9293,17 +9254,16 @@ vuepress-plugin-zooming@^1.1.8:
dependencies:
zooming "^2.1.1"
vuepress-theme-uni-app-test@^1.4.8:
version "1.4.8"
resolved "https://registry.npmmirror.com/vuepress-theme-uni-app-test/-/vuepress-theme-uni-app-test-1.4.8.tgz#d4abf41d92dbe1be3b606fef5d1bef88c7282c29"
integrity sha512-hrUFRw+wkFfhu3/RZefkVBWYi24TVYLxOHrIhzYQzeoTA3L2GOHcT+hSmMC4lto67jOYU3crHHjcdZ4ZrCkrcA==
vuepress-theme-uni-app-test@^1.4.10:
version "1.4.10"
resolved "https://registry.npmmirror.com/vuepress-theme-uni-app-test/-/vuepress-theme-uni-app-test-1.4.10.tgz#a143e91b0cfbeb5ef92e0d364d314aaf839bb4ca"
integrity sha512-zereHtqmarOb3sCPNz7Ytm1htZ8BHpufGIthmc6wZ/X1jWkEt5gHyyMSoyR+gqn1wf2aqOqxD2EzllC2Bclytw==
dependencies:
"@vuepress/plugin-back-to-top" "^1.9.5"
"@vuepress/theme-default" "^1.8.2"
algoliasearch "^4.13.1"
clipboard "^2.0.11"
vuepress-plugin-check-md2 "^1.0.4"
vuepress-plugin-expandable-row "^1.0.0"
vuepress-plugin-expandable-row "^1.0.3"
vuepress-plugin-juejin-style-copy "^1.0.4"
vuepress-plugin-mermaidjs "1.9.1"
vuepress-plugin-named-chunks "^1.1.4"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册