payment常见问题我要提意见

Payment模块管理支付功能,用于提供网页安全支付能力,支持通过Web接口进行支付操作。通过plus.payment可获取支付管理对象。

方法:

对象:

回调方法:

权限:

permissions


{
// ...
"permissions":{
	// ...
	"Payment": {
		"description": "支付"
	}
}
}
			

getChannels

获取支付通道


void plus.payment.getChannels(successCB, errorCB);
				

说明:

在进行支付操作前需获取终端支持的支付通道列表,用于提示用户进行选择。 获取支付通道成功后通过successCB回调返回支持的所有通道列表,获取支付通道列表失败则通过errorCB回调返回。

参数:

返回值:

void : 无

平台支持:

示例:


<!DOCTYPE html>
<html>
	<head>
	<meta charset="utf-8"/>
	<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
	<title>Payment Example</title>
	<script type="text/javascript">
var channels=null;
// 监听plusready事件  
document.addEventListener("plusready", function(){
	// 扩展API加载完毕,现在可以正常调用扩展API
	plus.payment.getChannels( function(s){
		channels = s;
	}, function(e){
		alert( "获取支付通道列表失败:"+e.message );
	});
}, false );
	</script>
	</head>
	<body>
	</body>
</html>
				

request

请求支付操作


void plus.payment.request(channel, statement, successCB, errorCB);
				

说明:

调用指定的支付通道进行支付操作,其中statement包含支付操作的相关信息,支付模块将弹出支付界面供用户进行支付信息的输入确认操作。 用户支付操作成功后通过successCB回调返回支付操作结果,支付操作失败则通过errorCB回调返回。

参数:

返回值:

void : 无

平台支持:

示例:


<!DOCTYPE html>
<html>
	<head>
	<meta charset="utf-8"/>
	<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
	<title>Payment Example</title>
	<script type="text/javascript">
var channels=null;
// 监听plusready事件  
document.addEventListener("plusready", function(){
	// 扩展API加载完毕,现在可以正常调用扩展API
	plus.payment.getChannels(function(s){
		channels = s;
	}, function(e){
		alert("获取支付通道列表失败:"+e.message);
	});
}, false );
// 请求支付操作
function requestPay(c){
	// 必须从业务服务器获取支付信息
	var statement = "...";
	plus.payment.request(c, statement, function(){
		alert("支付操作成功!");
	}, function(e){
		alert("支付失败:"+e.message);
	} );
}
	</script>
	</head>
	<body>
	</body>
</html>
				

PaymentChannel

支付通道对象


interface plus.payment.PaymentChannel{
	attribute String id;
	attribute String description;
	attribute Boolean serviceReady;
	function void installService();
	
	// iOS iAP
	function void requestOrder(ids, successCB, errorCB);
	function void restoreComplateRequest(options, successCB);
}
				

说明:

PaymentChannel对象表示特定的支付通道,用于向系统请求支付操作。

属性:

方法:

id

支付通道标识

说明:

String 类型 只读属性

用于标识支付通道: "alipay" - 表示支付宝; "wxpay" - 表示微信支付; "appleiap" - 表示苹果应用内支付; "qhpay" - 表示360聚合支付(仅360手助流应用环境下支持)。

平台支持:

description

支付通道描述

说明:

String 类型 只读属性

支付通道的描述信息,如“支付宝”、“微信”、“In-App Purchase”、“360聚合支付”。

平台支持:

serviceReady

支付通道服务是否安装

说明:

Boolean 类型 只读属性

通常特定的支付通道依赖系统安装相关的服务,此属性用于标识其服务是否安装,如果没有安装则为false,否则为true。 若系统环境中没有安装相关的服务,则可能导致调用支付操作失败,这时可以调用installService方法进行安装。 注意:如果支付通道不需要依赖系统安装服务,则永远返回true。例如支付宝,如果设备上未安装支付宝客户端则调用Wap页面进行支付,因此值固定返回true; 而微信支付则依赖微信客户端,如果设备上未安装微信客户端则serviceReady值为false,此时应该提示用户安装微信客户端才能进行支付操作。

平台支持:

installService

安装支付通道依赖的服务


void pay.installService();
						

说明:

对于某些支付通道,通常特定的支付通道依赖系统安装相关的服务,调用此方法将安装其依赖的支付服务。 如支付宝,则在系统中安装支付宝客户端程序。

参数:

返回值:

void : 无

平台支持:

示例:


<!DOCTYPE html>
<html>
	<head>
	<meta charset="utf-8"/>
	<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
	<title>Payment Example</title>
	<script type="text/javascript">
var channels=null;
// 监听plusready事件  
document.addEventListener("plusready", function(){
	// 扩展API加载完毕,现在可以正常调用扩展API
	plus.payment.getChannels(function(s){
		channels = s;
	}, function(e){
		alert("获取支付通道列表失败:"+e.message);
	});
}, false);
// 请求支付操作
function requestPay(c){
	// 必须从业务服务器获取支付信息
	var statement = "...";
	if(!c.serviceReady){
		c.installService();
	}
	plus.payment.request(c, statement, function(){
		alert("支付操作成功!");
	}, function(e){
		alert("支付失败:"+e.message);
	} );
}
	</script>
	</head>
	<body>
	</body>
</html>
						

requestOrder

向IAP服务器请求支付订单


void pay.requestOrder(ids, successCB, errorCB);
						

说明:

IAP支付在调用plus.payment.request方法支付前须先向服务器请求获取商品的详细信息,否则会支付失败。

参数:

返回值:

void : 无

平台支持:

示例:


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8"/>
		<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
		<meta name="HandheldFriendly" content="true"/>
		<meta name="MobileOptimized" content="320"/>
		<title>In-App Purchase</title>
		<script type="text/javascript" src="../js/common.js"></script>
		<script type="text/javascript">
var iap=null;
var ids=['donation','donation6'];//应用内购项目
function plusReady(){
	// 获取支付通道
	plus.payment.getChannels(function(channels){
		for(var i in channels){
			var channel=channels[i];
			if(channel.id==='appleiap'){
				iap=channel;
			}
		}
		requestOrder();
	},function(e){
		console.log("获取支付通道失败:"+e.message);
	});
}
document.addEventListener('plusready',plusReady,false);
// 获取订单
function requestOrder(){
	plus.nativeUI.showWaiting('检测支付环境...');
	iap.requestOrder(ids,function(e){
		plus.nativeUI.closeWaiting();
		console.log('requestOrder success: '+JSON.stringify(e));
	},function(e){
		console.log('requestOrder failed: '+JSON.stringify(e));
		plus.nativeUI.closeWaiting();
		plus.nativeUI.confirm("错误信息:"+JSON.stringify(e), function(e){
			if(e.index==0){
				requestOrder();
			}else{
				back();
			}
		}, '重新请求支付',['确定','取消']);
	});
}
// 支付
function pay(id){
	plus.nativeUI.showWaiting('', {style:"black",background:"rgba(0,0,0,0)"});
	plus.payment.request(iap, {productid:id}, function(result){
		plus.nativeUI.closeWaiting();
		plus.nativeUI.alert("支付成功:感谢你的支持,我们会继续努力完善产品。", function(){
			back();
		}, "捐赠");
	},function(e){
		plus.nativeUI.closeWaiting();
		plus.nativeUI.alert("错误信息:"+e.message,null,"支付失败:"+e.code);
	});
}
		</script>
		<link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8"/>
	</head>
	<body>
		<header id="header">
			<div class="nvbt iback" onclick="back()"></div>
			<div class="nvtt">In-App Purchase</div>
		</header>
		<div id="content" class="content">
			<br/><br/>
			<p class="des" style="font-size:16px;line-height:30px;margin: 0px .5em;">
DCloud 是W3C会员、中国HTML5产业联盟发起单位,致力于推进HTML5发展,构建HTML5生态。
			</p>
			<br/>
			<strong>
支持HTML5开发工具HBuilder
			</strong>
			<div class="button" onclick="pay(ids[0])">
				捐赠1元
			</div>
			<div class="button" onclick="pay(ids[1])">
				捐赠6元
			</div>
		</div>
	</body>
	<script type="text/javascript" src="../js/immersed.js" ></script>
</html>
						

restoreComplateRequest

向IAP服务器请求已经购买的非消耗性商品和订阅商品


void pay.restoreComplateRequest(options, successCB);
						

说明:

注意:不能获取已购买的消耗性商品。

参数:

返回值:

void : 无

平台支持:

示例:


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8"/>
		<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
		<meta name="HandheldFriendly" content="true"/>
		<meta name="MobileOptimized" content="320"/>
		<title>In-App Purchase</title>
		<script type="text/javascript">
var iap=null;
function plusReady(){
	// 获取支付通道
	plus.payment.getChannels(function(channels){
		for(var i in channels){
			var channel=channels[i];
			if(channel.id==='appleiap'){
				iap=channel;
			}
		}
	},function(e){
		console.log("获取支付通道失败:"+e.message);
	});
}
document.addEventListener('plusready',plusReady,false);
// 获取已购买商品(非消耗性商品和订阅商品)
function restoreComplateRequest(){
	plus.nativeUI.showWaiting('',{style:"black",background:"rgba(0,0,0,0)"});
	iap.restoreComplateRequest({},function(results){
		plus.nativeUI.closeWaiting();
		for(var i in results){
			alert('restoreComplateRequest['+i+']: '+JSON.stringify(results[i]));
		}
	});
}
		</script>
	</head>
	<body>
		<button onclick="restoreComplateRequest()">获取已购买商品</button>
	</body>
</html>
						

OrderStatementIAP

IAP订单数据对象


interface plus.payment.OrderStatementIAP {
	attribute String productid;
	attribute String username;
	attribute String quantity;
}
				

说明:

描述IAP商品订单信息,如标识、数量等。

属性:

PaymentResult

支付操作结果对象


interface plus.payment.PaymentResult {
	attribute PaymentChannel channel;
	attribute String tradeno;
	attribute String description;
	attribute String url;
	attribute String signature;
	attribute String rawdata;
}
				

说明:

PaymentResult对象表示支付操作返回结果,用于确认支付操作成功。

属性:

IAPProduct

IAP商品对象


interface plus.payment.IAPProduct {
	attribute String productid;
	attribute String price;
	attribute String title;
	attribute String description;
}
				

说明:

描述IAP商品详细信息,如标识、价格、标题、描述信息等。

属性:

IAPProductInfo

购买IAP商品对象


interface plus.payment.IAPProductInfo {
	attribute String productIdentifier;
	attribute String quantity;
}
				

说明:

描述购买的IAP商品详细信息,如标识、数量等。

属性:

IAPTransaction

购买IAP商品交易信息对象


interface plus.payment.IAPTransaction {
    attribute IAPProductInfo payment;
    attribute String transactionDate;
    attribute String transactionIdentifier;
    attribute String transactionReceipt;
    attribute String transactionState;
}
				

说明:

描述购买的IAP商品交易详细信息,如购买商品信息、交易日期、订单标识等。

属性:

ChannelsSuccessCallback

获取支付通道成功回调


void ChannelsSuccessCallback( channels ) {
	// Get payment channels success code
}
				

说明:

当获取支付通道列表成功时的回调函数,用于返回终端支持的支付通道列表。

参数:

返回值:

void : 无

平台支持:

IapRequestOrderSuccessCallback

请求支付商品列表回调方法


void onsuccess( results ) {
	// Payment success code
}
				

说明:

获取IAP商品列表信息成功时的回调函数,返回商品详细信息。

参数:

返回值:

void : 无

平台支持:

IapRestoreComplateRequestCallback

请求已经购买的非消耗性商品和订阅商品回调方法


void onsuccess( results ) {
	// Payment success code
}
				

说明:

获取IAP商品列表信息成功时的回调函数,返回商品详细信息。

参数:

返回值:

void : 无

平台支持:

PaymentSuccessCallback

支付操作成功回调


void PaymentSuccessCallback ( result ) {
	// Payment success code
}
				

说明:

当支付操作成功时的回调函数,用于返回支付操作的成功信息。

参数:

返回值:

void : 无

平台支持:

PaymentErrorCallback

支付操作失败回调


void PaymentErrorCallback(error){
	// Payment error code
}
				

说明:

当支付操作失败时的回调函数,用于返回支付操作失败的错误信息。

参数:

返回值:

void : 无

平台支持: