提交 fa96cfdc 编写于 作者: DCloud_JSON's avatar DCloud_JSON

Merge branch 'master' of https://gitee.com/dcloud/unidocs-zh

......@@ -141,7 +141,7 @@ export const navbar = [
},
{
text: 'uni 小程序 sdk',
link: 'https://nativesupport.dcloud.net.cn/UniMPDocs/SDKDownload/android',
link: 'https://nativesupport.dcloud.net.cn/README',
type: "link",
target: '_blank',
needOutbound: false
......
......@@ -51,6 +51,10 @@ const routerMap = {
'/api/a-d/rewarded-video-ad': '/api/a-d/rewarded-video.html',
'/api/ad/interstitial-ad': '/api/a-d/interstitial.html',
'/api/ui/navigate': '/api/router.html',
'/api/plugins/getLaunchOptionsSync': '/api/getLaunchOptionsSync.html',
'/api/plugins/getEnterOptionsSync': '/api/getEnterOptionsSync.html',
'/api/plugins/getLaunchOptionsSync.html': '/api/getLaunchOptionsSync.html',
'/api/plugins/getEnterOptionsSync.html': '/api/getEnterOptionsSync.html',
'/platform': '/tutorial/platform.html',
'/nvue-event': '/tutorial/nvue-event.html',
......
* [介绍](README.md)
* [框架](collocation/pages.md)
* [组件](component/README.md)
* [API](api/README.md)
* [uniCloud](uniCloud/README.md)
* [其它规范](http://www.html5plus.org/doc/h5p.html)
- [App扩展规范HTML5 Plus](http://www.html5plus.org/doc/h5p.html)
- [微信小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/)
- [支付宝小程序](https://docs.alipay.com/mini/developer/getting-started)
- [百度小程序](https://smartprogram.baidu.com/docs/develop/tutorial/codedir/)
- [字节跳动小程序](https://developer.toutiao.com/dev/cn/mini-app/develop/component/introduction/basic-component)
- [飞书小程序](https://open.feishu.cn/document/uYjL24iN/uUDNzUjL1QzM14SN0MTN)
- [钉钉小程序](https://developers.dingtalk.com/document/app/introduction-to-dingtalk-mini-programs)
- [QQ小程序](https://q.qq.com/wiki/develop/miniprogram/frame/)
- [快手小程序](https://mp.kuaishou.com/docs/develop/frame/config/conf_appjson.html)
- [京东小程序](https://mp-docs.jd.com/framework/)
- [华为快应用](https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/webview-component-view)
- [360小程序](https://mp.360.cn/doc/miniprogram/dev/#/view)
- [Weex](http://doc.weex.io/zh/guide/introduction.html)
<ul class="nav-href">
<li class="ext-link"><a href="//ext.dcloud.net.cn/" target="__blank">插件市场</a></li>
<li><a id="link-to-wish" href="javascript:void(0);">需求墙</a></li>
<li><a href="//dev.dcloud.net.cn/sponsor/?channel=uniapp" target="__blank" style="color:#FF6600!important;"><img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/45e691f0-4f3d-11eb-b680-7980c8a877b8.png" class="heart">赞助我们</a></li>
</ul>
<div class="github">
<a href="//github.com/dcloudio/uni-app" target="_blank">
<img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/44f8d690-4f3d-11eb-b680-7980c8a877b8.svg">
</a>
</div>
### uni.getEnterOptionsSync()
#### App、web 端
获取启动时的参数。返回值与App.onLaunch的回调参数一致
获取启动时的参数。
#### 小程序端
获取本次启动时的参数。如果当前小程序是冷启动,则返回值与 App.onLaunch 的回调参数一致;如果当前是热启动,则返回值与 App.onShow 一致。
注意:各平台在启动时,参数获取存在差异,详细如下:
- App平台:返回值与App.onLaunch的回调参数一致;
- Web平台:返回值与App.onLaunch的回调参数一致,不同Vue版本支持情况有差异:
* `vue3`项目:uni-app 3.2.13+ 支持;
* `vue2`项目:uni-app 3.5.1+ 支持。
- 小程序平台:如果当前小程序是冷启动,则返回值与 App.onLaunch 的回调参数一致;如果当前是热启动,则返回值与 App.onShow 一致。关于微信小程序冷启动热启动的概念,[详见](https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html)
关于微信小程序冷启动热启动的概念,[详见](https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html)
**平台兼容性说明**
|App|web|微信小程序|支付宝小程序|字节跳动小程序|快手小程序|QQ小程序|百度小程序|京东小程序|钉钉小程序|飞书小程序|
|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|
......
......@@ -4,7 +4,11 @@
|App|web|微信小程序|支付宝小程序|字节跳动小程序|QQ小程序|快手小程序|钉钉小程序|飞书小程序|百度小程序|京东小程序|
|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|
|√ `(3.4.10+)`|√ `(3.5.1+)`|√|√|√|√|√|√|√|x|x|
|√ `(3.4.10+)`|√ `(见下)`|√|√|√|√|√|√|√|x|x|
web平台不同Vue版本支持情况有差异:
- `vue2`项目:uni-app 3.5.1+ 支持
- `vue3`项目:uni-app 3.2.13+ 支持
**返回参数说明**
......
......@@ -207,7 +207,142 @@ uni.requestPayment({
})
```
苹果应用内支付
#### 苹果应用内支付@iap
支付流程
1. 获取支付通道 (uni.getProvider)
2. 通过支付通道获取产品列表 (iapChannel.requestProduct 可选)
3. 检查是否存在未关闭的订单 (iapChannel.restoreCompletedTransactions)
4. 请求支付,传递产品信息 (uni.requestPayment)
5. 客户端接收苹果返回的支付票据发送到服务器,在服务器请求苹果服务器验证支付是否有效
6. 服务器验证票据有效后在客户端关闭订单 (iapChannel.finishTransaction)
3.5.1 之前因自动关闭订单导致某些情况下丢单的问题
3.5.1 + 增加了手动关闭订单参数 `manualFinishTransaction`, 在合适的时机调用 `iapChannel.finishTransaction` 关闭订单
3.5.1+ 开始支持通过 `uni.getProvider` 获取IAP支付通道的方法
获取IAP支付通道
```js
uni.getProvider({
service: 'payment',
success: (res) => {
const iapChannel = res.providers.find((channel) => {
return (channel.id === 'appleiap')
})
// 如果 iapChannel 为 null,说明当前包没有包含iap支付模块。注意:HBuilder基座不包含 iap 通道
}
});
```
**IAP支付通道相关方法**
向苹果服务器获取产品列表
`iapChannel.requestProduct(<Function> success, <Function> fail)`
`success` 回调值类型 `Array<Product>`
获取苹果服务器已支付且未关闭的交易列表
`iapChannel.restoreCompletedTransactions(<Function> success, <Function> fail)`
`success` 回调值类型 `Array<Transaction>`
关闭苹果服务器订单
`iapChannel.finishTransaction(Transaction, <Function> success, <Function> fail)`
所有 `fail` 回调格式为 `{ errCode: xxx, errMsg: '' }`
`uni.requestPayment()` 说明
```js
uni.requestPayment({
provider: 'appleiap',
orderInfo: {},
success: (e) => {
// e 类型为 Transaction, 详见下面的描述
}
})
```
**orderInfo**
|属性|类型|默认值|说明|
|:-|:-|:-|:-|
|productid|String||产品id,在苹果开发者中心配置|
|username|String||透传参数,一般用于标记订单和用户的关系,向苹果服务器二次验证票据时返回此字段|
|quantity|Number|1|购买数量,至少大于等于 `1`|
|manualFinishTransaction|Boolean|false|3.5.1+ 支持,手动关闭订单,值为 `false` 时支付完成后自动关闭订单,`true`时不关闭订单,需要在合适的时机调用 `finishTransaction` 关闭订单。建议设置为 `true`, 默认值为 `false` 是为了向下兼容|
**Product**
|属性|类型|说明|
|:-|:-|:-|
|title|String|产品标题|
|description|String|产品描述|
|productid|String|产品id,在苹果开发者中心配置|
|price|Number|价格|
|pricelocal|String|币种,例如: `zh_CN@currency=CNY`|
**Transaction**
|属性|类型|说明|
|:-|:-|:-|
|payment|Object|支付信息,详见下面的说明|
|transactionDate|String|交易日期,示例 `2022-01-01 08:00:00`|
|transactionIdentifier|String|交易唯一标识|
|transactionReceipt|String|支付票据,用于在开发者的服务器向苹果的服务器二次验证交易是否有效|
|transactionState|String|交易状态码|
**Payment**
|属性|类型|说明|
|:-|:-|:-|
|productid|String|产品id|
|quantity|String|购买数量|
|username|String|透传参数|
**transactionState**
值类型:String
|值|说明|
|:-|:-|
|1|交易成功|
注意事项
- 相同订单,重复调用 `restoreCompletedTransactions``transactionReceipt` 会发生变化,并非唯一值
#### 订单丢失场景
- 用户没有绑定 `AppStore` 支付方式,调用 `uni.requestPayment()` 准备支付,触发失败 `fail` 回调,errCode=2,用户未绑定支付方式,app内支付流程结束。
系统弹出框引导用户绑定支付方式,此过程将跳转到系统应用 `AppStore` 进行绑定支付方式,绑定成功同步支付成功,用户成功付款
下面为未处理丢单的示例代码,后续提供完整代码
```html
<template>
......@@ -228,7 +363,7 @@ uni.requestPayment({
</template>
```
```javascript
```js
<script>
let iapChannel = null,
productId = 'HelloUniappPayment1',
......
......@@ -44,7 +44,7 @@
|:-|:-|:-|
|locale|String|当前语言|
#### 提示
### 注意事项
* 组件和接口显示会根据设置的语言环境自动切换,未支持的系统语言环境会显示为英文。
* App-Android 平台设置新的语言后会自动重启应用。
......
......@@ -72,4 +72,3 @@ plus.oauth.getServices(function(services) {
})
```
0-4c22-aa61-0d63120e1a4b.png)
......@@ -102,8 +102,8 @@ var restoreFlag = true; // 调用支付接口时标记 restoreFlag = true , 实
plus.payment.request(iap, {
productid: "商品id",
username: "appusername", // 用户标识
optimize: true, // 设置 optimize: true 解决丢单问题
iapVersion: 2 // 3.5.0+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction()
optimize: true, // 设置 optimize: true 解决丢单问题,已废弃,推荐使用 manualFinishTransaction
manualFinishTransaction: true // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction()
}, function(result){
restoreFlag = false; // 支付成功清除标记 restoreFlag = false
// 支付成功,result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证
......@@ -167,24 +167,28 @@ document.addEventListener('resume',function(){
```
#### 丢单问题说明
通过和用户联调我们发现在调用支付接口后,如果用户未绑定支付方式此时会触发支付失败回调方法,实际上用户可以跳转 AppStrore 绑卡然后继续支付,之前的逻辑在回调失败方法中框架会关闭订单,用户付完钱在回到App中也不会触发成功回调,这样就造成了丢单,解决方法就是在调用支付接口时添加optimize: true参数,并标记 restoreFlag = true;,支付成功回调中清除标记 restoreFlag = false; 然后在支付失败回调中框架就不会关闭订单了,并在页面显示的时候通过标记判断是否需要调用 restoreComplateRequest 方法,如果用户跳转App Store绑定支付方式付款成功后回到 App 就可以通过 restoreComplateRequest 方法恢复之前支付的订单信息,解决丢单的问题;
3.5.1 之前因自动关闭订单导致某些情况下丢单的问题
3.5.1 +
#### 丢单解决方案
- 新增手动关闭订单参数 `manualFinishTransaction`, 在合适的时机调用 `iapChannel.finishTransaction` 关闭订单
3.5.0+ 支持
- 新增关闭订单方法 `iapChannel.finishTransaction(Transaction, <Function> success, <Function> fail)`
- 调用支付和恢复购买时传递参数 `iapVersion`, 设置后订单不会关闭,需要开发者在合适的时机调用 `finishTransaction` 关闭订单
- 新增 iapChannel 方法 `requestProduct` `restoreCompletedTransactions` 替代 `requestOrder` `restoreComplateRequest`
```js
// 支付
plus.payment.request(iapChannel, {
iapVersion: 2
manualFinishTransaction: true
})
// 恢复
iapChannel.restoreComplateRequest({
iapVersion: 2
iapChannel.restoreCompletedTransactions({
manualFinishTransaction: true
})
```
......@@ -193,7 +197,7 @@ iapChannel.restoreComplateRequest({
1. 网络原因
2. 用户首次绑卡
过段时间调用恢复购买 `restoreComplateRequest` 可以获取到上次异常或未完成的订单
过段时间调用恢复购买 `restoreCompletedTransactions` 可以获取到上次异常或未完成的订单
- 正确关闭订单的方法
......@@ -202,8 +206,8 @@ iapChannel.restoreComplateRequest({
3. 二次确认后可安全调用 `finishTransaction` 关闭订单
注意:
- 在订单未关闭时,即使卸载应用调用恢复购买 `restoreComplateRequest` 仍然可以获取到
- A账号下载的应用,切换B账号, 调用 `restoreComplateRequest` 系统弹窗提示恢复购买失败
- 在订单未关闭时,即使卸载应用调用恢复购买 `restoreCompletedTransactions` 仍然可以获取到
- A账号下载的应用,切换B账号, 调用 `restoreCompletedTransactions` 系统弹窗提示恢复购买失败
### 常见问题
......
......@@ -845,11 +845,11 @@ exports.main = async function(event, context) {
如果此云函数运行在腾讯云nodejs12,setTimeout里面的console.log会在本次云函数调用内,同样的本次云函数计费时间也会按照最终执行完成的时间计算(5000ms+return耗时)。但是前端无需等待5秒即可收到响应。**注意:如果有未断开的长连接(例如:redis连接)会导致云函数一直运行到配置的超时时间**
当在云函数package.json内的cloudfunction-config内配置了`keepRunningAfterReturn: false`时,可以改变腾讯云nodejs12的表现,云函数return之后将不再继续执行,未断开的长连接也不会增加云函数实际运行时间,简单来说其表现和腾讯云nodejs8一致。
当在云函数package.json内的cloudfunction-config内配置了`keepRunningAfterReturn: false`时,可以改变腾讯云nodejs12的表现,云函数return之后将不再继续执行,未断开的长连接也不会增加云函数实际运行时间,云函数return后长连接也不会被中断,简单来说其表现和腾讯云nodejs8一致。
**腾讯云nodejs12使用redis**
由于redis需要和服务器建立连接,此连接会阻止云函数结束执行。如果没有云函数return之后还需要继续执行的需求,可以简单的在`cloudfunction-config`内配置`keepRunningAfterReturn: false`
由于redis需要和服务器建立连接,此连接会阻止云函数结束执行。如果没有云函数return之后还需要继续执行的需求,可以简单的在`cloudfunction-config`内配置`keepRunningAfterReturn: false`这样redis的连接并不会中断,下次请求来时依然可以使用之前建立的连接。
如果需要return之后继续执行,那么需要在使用完毕后断开redis连接,调用`redis.quit()`方法即可断开连接。需要注意的是断开连接后之前建立的连接将不再可用,下个请求到来时需要使用`uniCloud.redis()`方法重新建立连接。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册