ios集成这种支付宝接口集成教程接口的开发流程?

PayPal支付接口的PHP开发流程—外贸B2C网站PayPal集成指南
随着外贸电商B2C逐渐成熟化,最近很多B2C外贸电商在建站集成paypal按钮的时候,会遇到各种问题咨询vivian。今天,vivian给大家分享一下PayPal支付接口的PHP开发方式的整个流程,希望能够帮助到更多的外贸电商。
简单介绍一下paypal ipn,所谓paypal ipn(Instant Payment
Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后,
交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP
POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN
Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal
的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这
些数据进行操作。
开设Sandbox帐号
代码的调试是一件很痛苦的事情,作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了Sandbox给
开发人员进行开发,首先到/注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这
种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal
Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal
Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录
Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少
920-203 920-533
)。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击Edit按钮,打开IPN,这里如果你使用
的是固定的IPN Handle,可以直接将地址填入。
接下来,我们测试的时候,应该将Paypal接口的地址设置为
基本的流程
当客户向您付款时,PayPal将向位于指定 URL (type=”hidden” name=”notify_url”
“)的服务器发送一个通知。此通知中将包括您的客户的所有付款信息(例如,客户名称、金额),以及一段加密代码。当服务器收到通知时,它随后会将该信息
(包括加密代码)发送回安全的PayPal URL。PayPal将通过检查加密字符串对交易进行身份验证。这种将 IPN
数据传回PayPal的操作防止了“欺骗”,因此您可以确保 IPN
来自PayPal。在进行验证时,PayPal会将其合法性的确认信息发送回您的服务器。
提示:要启用即时付款通知,您将需要输入一个 URL,通过它您可以接收到来自您的用户信息的通知。
启用了即时付款通知后,每次当您接收付款时您的服务器都会收到一个通知,此通知将以隐藏的“FORM POST”的方式发送到指定的
URL,并将包括所有付款信息。此页面的底部列出了通知的 FORM 变量。
每次收到来自PayPal的 IPN 时,您必须在实施订单之前完成如下所述的通知确认过程。确认列出的信息将可确保交易合法。
通知确认IPN
为了确保付款已进入您的PayPal账户,您必须验证用作“receiver_email”的电子邮件地址是否已在您的PayPal账户中注册并得到确认。
服务器收到即时付款通知后,您将需要通过构建一个发送到PayPal的 HTTP POST 对其进行确认。您的 POST
应发送到/cgi-bin/webscr
您必须完全按照收到表单变量时的原样发送所有收到的表单变量。您还需要将一个值为“_notify-validate”的名为“cmd”变量(例如,cmd=_notify-validate)附加到
POST 字符串。
PayPal将回复该 POST,并在回复的正文中包含一个单词“VERIFIED”或“INVALID”。当您收到 VERIFIED
回复时,您需要在实施订单之前执行若干检查:
确认“payment_status”为“Completed”,因为系统也会为其他结果(如“Pending”或“Failed”)发送
检查“txn_id”是否未重复,以防止欺诈者重复使用旧的已完成的交易。
验证“receiver_email”是已在您的PayPal账户中注册的电子邮件地址,以防止将付款发送到欺诈者的账户 。
检查其他交易详情(如物品号和价格),以确认价格未改变完成了以上检查后,您可以使用 IPN
数据更新您的数据库,并处理购物。
如果收到“无效”通知,则应将其视为可疑通知,并应对其进行调查。
主要参数:
向PayPal提交粘贴代码时,应包括以下 4 个隐藏变量及一张图片,这就是说,您粘贴到PayPal的最短必需代码应如下:
&&/SPAN&form action="/row/cgi-bin/webscr"
method="post"&
&&/SPAN&input type="hidden"
name="cmd"
value="_xclick"&
// "_xclick" 立即购买
&&/SPAN&input type="hidden"
name="business"
//PayPal账户上的电子邮件地址
&&/SPAN&input type="hidden"
name="item_name"
value="Item
Name"&//物品名称(或购物车名称)
&&/SPAN&input type="hidden"
name="currency_code" value="USD"&
//定义币种以标示货币变量 值可以为
"USD"、"EUR"、"GBP"、"CAD"、"JPY"。
&&/SPAN&input type="hidden"
name="amount"
value="0.00"&
//物品的价格(购物车中所有物品的总价格,因为是_Xclick模式)
&&/SPAN&input type="image"
src="/zh_XC/i/btn/x-click-but01.
gif" name="submit"
alt="请使用PayPal付款!"&
&/&/SPAN&form&
business 您的PayPal账户上的电子邮件地址
quantity 物品数量。大于 1 时,会与金额相乘
item_name 物品名称(或购物车名称)。必须是字母数字字符,最多为 127 个字符
item_number 用于跟踪付款的可选传递变量。必须是字母数字字符,最多为 127 个字符
amount 物品的价格(购物车中所有物品的总价格)
shipping 该物品的运送成本
shipping2 每增加一件物品所需的运送成本
handling 手续费
tax 基于交易的税额。如果使用该变量,传递值将覆盖所有用户信息税收设置(不管买家所在位置)。
no_shipping 送货地址。如果设为 "1",则不会要求您的客户提供送货地址。该变量为可选项;如果省略或设为
"0",将提示您的客户输入送货地址
cn 可选标签,会在提示栏上显示(最多 40 个字符)
no_note 为付款加入提示。如果设为 "1",则不会提示您的客户输入提示。该变量为可选项;如果省略或设为
"0",将提示您的客户输入提示。
on0 第一选项栏名称。最多 64 个字符
os0 第一组选项值。最多 200 个字符。"on0" 必须定义,以便识别 "os0"。
on1 第二选项栏名称。最多 64 个字符
os1 第二组选项值。最多 200 个字符。"on1" 必须定义,以便识别 "os1"。
custom 决不会向您的客户显示的可选转递变量。可用于跟踪存货
invoice 决不会向您的客户显示的可选转递变量。可用于跟踪账单号
notify_url 仅与 IPN 一起使用。发送 IPN Form Post 的互联网 URL
return 您的客户完成付款后将返回的互联网 URL
cancel_return 您的客户取消付款后将返回的互联网 URL
image_url 您要用作图标的图片的互联网 URL,图片大小为 150 X 50 像素
cs 设置您的付款页面的背景色。如果设为 "1",背景色将为黑色。该变量为可选项;如果省略或设为 "0",背景色将为白色
PayPal 允许您粘贴扩展变量,条件是将改变以下 "cmd" 值:
通过上述 “cmd” 值修改,您还可使用以下变量:
客户的电子邮件地址
first_name 客户的名。必须是字母数字字符,最多为 32 个字符
last_name 客户的姓。必须是字母数字字符,最多为 64 个字符
address1 客户地址所在国家或地区。必须是字母数字字符,最多为 100 个字符
address2 客户地址第二行。必须是字母数字字符,最多为 100 个字符
city 客户地址所在城市。必须是字母数字字符,最多为 100 个字符
state 客户地址所在州。必须是正式的 2 个字母缩写
zip 客户地址的邮政编码
night_phone_a 客户夜间联系电话号码的区号
night_phone_b 客户夜间联系电话号码前三位
day_phone_a 客户白天联系电话号码的区号
day_phone_b 客户白天联系电话号码前三位
提示:若要更改”用户信息”中的默认运费和手续费设置,请转至您的用户信息,编辑您的运费计算,然后点击”允许采用基于交易的运费”复选框。
将单个物品传递给PayPal
如果您的第三方购物车可设置成向PayPal传递单个物品,有关物品的信息将加入买家和卖家的记录日志和系统通知中。要加入该物品的信息,您需要将
HTML 格式元素粘贴至PayPal购物车流程的新版本。该过程与 #1
节"将总购物车数量传递给PayPal"描述的非常相似,不同之处在于:
将 "cmd" 变量设置到 "_cart"
更换必要的 HTML 行
添加称为 “upload” 的新变量
在 &表格& 和 标签之间新增以下行:
定义物品明细
对于以下各特定物品参数,定义与通过您的合作商购物车购买的各物品对应的一组新值。将 “_x” 附加到变量名称,其中 x
是物品号码,从 1 开始,每加入一物品增加一。
item_name_x (物品 #x 需要)购物车中物品 #x 的名称。必须是字母数字字符,最多为 127 个字符
item_number_x 与购物车中物品 #x 关联的可选传递变量。必须是字母数字字符,最多为 127 个字符
amount_x (物品 #x 需要)物品 #x 的价格
shipping_x 运送物品 #x 的第一件(数量 1)的成本
shipping2_x 每增加一件运送物品 #x(数量 2 或更多)所需的运送成本
handling_x 物品 #x 的处理成本
on0_x 物品 #x 的第一选项栏名称。最多 64 个字符
os0_x 物品 #x 的第一组选项值。最多 200 个字符。”on0_x” 必须定义,以便识别 “os0_x”。
on1_x 物品 #x 的第二选项栏名称。最多 64 个字符
os1_x 物品 #x 的第二组选项值。最多 200 个字符。”on1_x” 必须定义,以便识别 “os1_x”。
为购物车中每件物品重复此设定
为您的买家购物车中的各物品加入以上表格中的一组必需的变量和任何选项变量。购物车中的第一物品必须用以 “_1&P 结束的参数定义,如
“item_name_1&P、”amount_1&P 等。同样,第二物品应用变量 “item_name_2&P、”amount_2&P
等命名。提示:”_x” 值必须以一为单位按序递增,以便识别。如果从 item #1 跳到 item #3 而不定义 item
#2,则第三个物品会被忽略。
要指定币种:所有货币变量(金额、运费、运费 2、手续费、税款)将以粘贴在付款上的 “currency_code”
变量指定的币种显示。因为其不是随物品不同的,无需向变量名称附加 “_x”。如果没有粘贴 “currency_code”
变量,我们将假定所有货币变量值为美元。
以上就是本文所介绍的运用PHP开发PayPal支付接口的主要操作步骤。
PayPal商业顾问
我的工作邮箱:
&如果要注册PayPal账户请先联系我
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。[iOS]应用内支付(内购)的个人开发过程及坑!
[iOS]应用内支付(内购)的个人开发过程及坑!
本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助。
本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统。
部分地方直接摘自网络,基本上是我的逻辑,省时省心省力。
一. 创建测试App
首先你需要登录 App的ItunesConnection,你会看到如下界面
简单的介绍一下这几个选项
1.我的App主要用于管理自己的App应用,例如编辑资料,上架,下架等。
2.销售和趋势主要是来查看App在各个平台的下载量,收入等方面数据,里面有曲线图等图文结合的方式给我们参考。
3.付款和财务报告显示的是你的收入以及付款等相关信息。
4.iAd主要是跟广告有关,开发者可以登录到Workbench,通过iAd对应用的广告进行控制。
5.用户和职能用于生成相应账号,例如苹果沙河测试账号。
6.协议,税务和银行业务则是你银行相关账户的信息设置。
在这里我们选择第一个选项,我的App, 然后点击左上角的加号,新建一个用来测试用的App。
点新建 App,会出现新建窗口;
在这里有几个需要填写的地方,名称自己取,平台IOS,语言选择了简体中文,套装ID也就是你的Bundle Identifier,需要你在 申请BundleID,SKU可以理解为用户看一看到的唯一标示,会体现在你的app的App Store的链接中。
二.添加内购
App创建好之后,我们打开创建的App,在左上角选择功能,会看到左侧的App 内购买项目。我们点击右下角的加号,为App添加内购项目。
之后我们会看到类型的选项,如下图
官方的注释写的很清楚了,只在这里简单的说下前两种:
- 消耗型项目 就像你玩游戏需要买金币,买钻石等,只要花钱就可以无限次的购买
- 非消耗型项目 就像你在App Store购买App,买了一次之后就不用再买第二次,你拥有永久使用权。
在我们的app中,是充值会员,所以选择的是第一种,可以无限次购买。
这里有几个选项,需要填写商品名称,产品ID以及价格等级,简单说明一下
1. 商品名称根据你的消费道具的实际意义来说明,比如“100颗宝石”,“100金币”等。
2. 产品ID是比较重要的,由项目自定义,只要唯一即可,因为测试,我在这里随便填写的123,在实际应用中,一定要认真填写。
3. 价格等级的话“查看价格表”中有对应的说明,可以对照着表中每个国家的货币价格与等级来选择
接下来是语言选择,和上传快照如下图
点击添加语言,填写名称和描述,这里我们依然选择简体中文,如下
审核备注,根据实际情况填写,可以不填。而下面的屏幕快照,则是商品图片,以像素为单位,最低尺寸为321,390,尺寸需求如下图,上传即可。
到这里为止, 我们的内购项目则添加完成。接下来则是测试阶段了。
三.申请沙盒测试账号(用来测试购买项目)
这个账号,是利用苹果的沙盒测试环境来模拟AppStore的购买流程,你肯定不会想要用真实RMB去购买测试吧?
首先我们回到iTunes Connect中,在这里我们选择用户和职能。
然后在上面的第三个选项沙箱技术测试员中点击加号,添加测试员。
在信息填写页面只简单说两句。
所有信息都可以随意填写,不用管是否真实。
App Store地区选择,一定要选对,它对应的是你创建的App的地区, 你App是中国的话, 在这里我们依然选择中国。
此账号只能用来测试,不要在正式的appstore上使用
填写完毕,点击保存后,我们则生成一个测试账号,当然这个账号是可以随时删除和添加的。
之后终于到了写代码的时候了,点开你的Xcode创建你的项目!
大部分代码都可以在.m文件中实现。
#import "ViewController.h"
#import &StoreKit/StoreKit.h&
#import "SVProgressHUD.h"
@interface ViewController ()&SKPaymentTransactionObserver,SKProductsRequestDelegate&
@property (nonatomic,copy) NSString *currentProId;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(100, 100, 100, 100);
button.backgroundColor = [UIColor greenColor];
[button setTitle:@"6元" forState:UIControlStateNormal];
[button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button];
- (void)btnClick:(UIButton *)button
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
_currentProId = @"123";
if([SKPaymentQueue canMakePayments]){
[self requestProductData:product];
NSLog(@"不允许程序内付费");
- (void)requestProductData:(NSString *)type{
NSLog(@"-------------请求对应的产品信息----------------");
[SVProgressHUD showWithStatus:nil maskType:SVProgressHUDMaskTypeBlack];
NSArray *product = [[NSArray alloc] initWithObjects:type,nil];
NSSet *nsset = [NSSet setWithArray:product];
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
request.delegate = self;
[request start];
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
NSLog(@"--------------收到产品反馈消息---------------------");
NSArray *product = response.products;
if([product count] == 0){
[SVProgressHUD dismiss];
NSLog(@"--------------没有商品------------------");
NSLog(@"productID:%@", response.invalidProductIdentifiers);
NSLog(@"产品付费数量:%lu",(unsigned long)[product count]);
SKProduct *p = nil;
for (SKProduct *pro in product) {
NSLog(@"%@", [pro description]);
NSLog(@"%@", [pro localizedTitle]);
NSLog(@"%@", [pro localizedDescription]);
NSLog(@"%@", [pro price]);
NSLog(@"%@", [pro productIdentifier]);
if([pro.productIdentifier isEqualToString:_currentProId]){
SKPayment *payment = [SKPayment paymentWithProduct:p];
NSLog(@"发送购买请求");
[[SKPaymentQueue defaultQueue] addPayment:payment];
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
[SVProgressHUD showErrorWithStatus:@"支付失败"];
NSLog(@"------------------错误-----------------:%@", error);
- (void)requestDidFinish:(SKRequest *)request{
[SVProgressHUD dismiss];
NSLog(@"------------反馈信息结束-----------------");
#define SANDBOX @"https://sandbox./verifyReceipt"
#define AppStore @"https://buy./verifyReceipt"
-(void)verifyPurchaseWithPaymentTransaction{
NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];
NSString *receiptString=[receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:SANDBOX];
NSMutableURLRequest *requestM=[NSMutableURLRequest requestWithURL:url];
requestM.HTTPBody=bodyD
requestM.HTTPMethod=@"POST";
NSError *error=nil;
NSData *responseData=[NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error];
if (error) {
NSLog(@"验证购买过程中发生错误,错误信息:%@",error.localizedDescription);
NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dic);
if([dic[@"status"] intValue]==0){
NSLog(@"购买成功!");
NSDictionary *dicReceipt= dic[@"receipt"];
NSDictionary *dicInApp=[dicReceipt[@"in_app"] firstObject];
NSString *productIdentifier= dicInApp[@"product_id"];
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
if ([productIdentifier isEqualToString:@"123"]) {
int purchasedCount=[defaults integerForKey:productIdentifier];
[[NSUserDefaults standardUserDefaults] setInteger:(purchasedCount+1) forKey:productIdentifier];
[defaults setBool:YES forKey:productIdentifier];
NSLog(@"购买失败,未通过验证!");
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{
for(SKPaymentTransaction *tran in transaction){
switch (tran.transactionState) {
case SKPaymentTransactionStatePurchased:{
NSLog(@"交易完成");
[self verifyPurchaseWithPaymentTransaction];
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
case SKPaymentTransactionStatePurchasing:
NSLog(@"商品添加进列表");
case SKPaymentTransactionStateRestored:{
NSLog(@"已经购买过商品");
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
case SKPaymentTransactionStateFailed:{
NSLog(@"交易失败");
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
[SVProgressHUD showErrorWithStatus:@"购买失败"];
- (void)completeTransaction:(SKPaymentTransaction *)transaction{
NSLog(@"交易结束");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
- (void)dealloc{
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
在这里需要注意几点,
1. 代码中的_currentProId所填写的是你的购买项目的的ID,这个和第二步创建的内购的productID要一致;本例中是 123。
2. 在监听购买结果后,一定要调用[[SKPaymentQueue defaultQueue] finishTransaction:tran];来允许你从支付队列中移除交易。
3. 沙盒环境测试appStore内购流程的时候,请使用没越狱的设备。
4. 请务必使用真机来测试,一切以真机为准。
5. 项目的Bundle identifier需要与您申请AppID时填写的bundleID一致,不然会无法请求到商品信息。
6. 真机测试的时候,一定要退出原来的账号,才能用沙盒测试账号
7. 二次验证,请注意区分宏, 测试用沙盒验证,App Store审核的时候也使用的是沙盒购买,所以验证购买凭证的时候需要判断返回Status Code决定是否去沙盒进行二次验证,为了线上用户的使用,验证的顺序肯定是先验证正式环境,此时若返回值为21007,就需要去沙盒二次验证,因为此购买的是在沙盒进行的。
附:苹果支付错误目录
Status Code
Description
The App Store could not read the JSON object you provided.
The data in the receipt-data property was malformed or missing.
The receipt could not be authenticated.
The shared secret you provided does not match the shared secret on file for your account.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.
The receipt server is not currently available.
This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.
This receipt is from the test environment, but it was sent to the production environment for verification. Send it to the test environment instead.
This receipt is from the production environment, but it was sent to the test environment for verification. Send it to the production environment instead.
我的热门文章
即使是一小步也想与你分享IDE开发流程之多入口开发(Beta版)
随着移动互联网的爆发,入口之争愈演愈烈。从大的趋势看,App、Web、微信成为最火热的三大入口。这给移动开发者和移动创业者带来新的考验,需要考虑多个入口下的开发与管理。顺应这种趋势,AppCan全新升级IDE系统,为开发者提供全入口开发支持,即一次开发,多平台,多入口,全适配。基于AppCan新版IDE,开发者可一键生成App、Web/微信 App两种形式,轻松应对市场需求,在竞争中更胜一筹。
1、使用范围当您的应用中仅涉及到了以下方法,均可支持生成Web/微信 App。
uexWindow.openuexWindow.cbOpenuexWindow.closeuexWindow.cbCloseuexWindow.closeByNameuexWindow.openPopoveruexWindow.closePopoveruexWindow.setPopoverFrameuexWindow.setBounceuexWindow.refreshBounceuexWindow.evaluateScriptuexWindow.evaluatePopoverScriptuexWindow.alertuexWindow.closeAlertuexWindow.confirmuexWindow.toastuexWindow.closeToastuexWindow.actionSheetuexWindow.cbActionSheetuexWindow.bringPopoverToFront //窗口打开暂不支持多窗口数组形式
另外,想要使用微信接口,需要后端提供一个签名服务器(该版面提供nodejs 版本),并且再所有用到接口的页面进行签名否则所有接口失效,该版本提供一个setWeiXinConfig(url)方法,进行自动签名,URL是签名接口的完整路径。已兼容接口:
· startRecord &==& uexAudio.startBackgroundRecord·
stopRecord &==& uexAudio.stopBackgroundRecord·
onVoiceRecordEnd &==& uexAudio.cbBackgroundRecord·
playVoice &==& uexAudio.open && uexAudio.play·
pauseVoice &==& uexAudio.pause·
stopVoice &==& uexAudio.stop·
onVoicePlayEnd &==& uexAudio.onPlayFinished·
chooseImage &==& uexImageBrowser.pick && uexImageBrowser.pickMulti·
previewImage &==& uexImageBrowser.open·
getNetworkType &==& device.getInfo(‘13’)·
openLocation &==& uexBaiduMap.open && uexBaiduMap.setZoomLevel && uexBaiduMap.setCenter·
getLocation &==& uexBaiduMap.getCurrentLocation·
scanQRCode &==& uexScanner.open如想用微信其他接口,可自行封装。
2、使用方法在IDE中应用开发完成后,如要生成Web/微信 App,需先配置当前应用的config.xml文件,勾选”Web/微信 App”选项并保存;
注:勾选“Web/微信 App”后,请避免使用页面实时预览、模拟器调试及svn代码上传功能。如想使用,请提前在config.xml文件中勾掉不选。
在当前应用中选择phone目录右键,
1)、选择“启动Web/微信 App服务”,可启动本地服务在内网中预览应用效果,此时控制台会显示本机IP及端口
在手机浏览器或微信中输入或扫描IP+端口地址,直接预览应用效果;
2)、选择“生成Web/微信 App”,在安装目录中的WebApp-Applications中生成一个zip包
将zip包部署至外网服务器即可访问。
3)、项目开发完成后需要部署到服务器上才能访问,首先你需要一台外网机器,以我的测试机器为例,登录到服务器上
可以自己部署服务器,也可以用我们提供的nodejs包,安装nodejs,也可以参考nodejs官方文档,按照完成后输入node –查看nodejs是否安装成功
部署我们提供的nodejs包,可以在index.js中修改端口号,你的webapp应该放在public文件下,该目录默认为静态文件目录,你也可以在index.js中修改
把该包传到服务器上然后,切换到相对应目录用node index.js来启动服务
注:使用node index.js启动服务时如遇以下错误,请在根目录创建logs目录即可
我们就可以在手机上访问我们的web app网站了地址为:http://ip:port/index.html如果我们想生成微信的app,调用微信的接口,我们需要修改一下配置文件,来启动签名服务。打开config目录下面的config.js文件
在微信的公众号管理后台中找到这些参数,参考:
配置完成后重写启动node服务器后,可以打开默认的签名服务接口如需配置为自有的公众号接入微信JS SDK接口,需登录公众号微信公众平台-》公众号设置-》功能设置-》js接口安全域名设置,例如:生成微信版项目中plugin.js中已设置window.setWeinxinConfig()注册签名,在微信中打开然后所有的接口都可用了,如需更改请根据需要传入相应参数。
在微信中打开然后所有的接口都可用了,demo效果,
3、常见问题及解决方法1)、名称冲突:如果你修改了一个元素属性或者一个元素的样式不起作用时,你可以考虑一下去检查是不是元素命名冲突了,因为我们要把所有的popover合并到一个页面中所以会有冲突问题。2)、css样式覆盖:如果你加载一个页面后原始页面的其他样式乱了,你可以考虑一下新页面中的样式是否把原有样式覆盖了,因为我们要把所有的popover合并到一个页面中所以会有冲突问题。3)、css样式不起作用:如果你打开一个新的popover页面,引用的css文件中修改样式不起作用,可以考虑这个问题,同一个样式在同一个win中只会加载一次,后续的不会加载。4)、js冲突问题:如果你新打开一个浮动窗口,然后关闭了,以前写的某个方法原本好的现在报错了,可以考虑一下这个问题,因为我们要把所有的popover合并到一个页面中所以会有冲突问题。5)、js判断问题:如果你新打开一个浮动窗口,执行一个判断某一个变量是否存在,或者不是按照正确的方式,可以考虑一下这个问题,因为我们要把所有的popover合并到一个页面中所以会有冲突问题,所以后面执行后会修改已存在的变量。6)、body、html样式问题:如果你在body、html上面加了一些样式,在web app中可能不显示,因为我们默认会把所有的body、html、head等元素删掉。7)、滑动区域高度问题:如果你打开popover之后操作dom,高度变化,请尽量调用refreshBounce更新IScroll高度,否则可能滑动到底部会有显示不完全的问题8)、白色popover问题:由于popover会相互覆盖,web app默认会把所有的popover设置成白色,如果需要将popover设置成透明,请根据文档设置extraInfo参数。9)、返回按钮:因为open的页面设计为跳转,如果你在一个页面调用openPopover,然后在popover内调用open是从主窗口直接跳转,然后close主窗口返回上一个主窗口,可能返回不到你之前在主窗口操作的记录如底部有tab选项卡切换popover时,可通过setPopTabIndex(popName,index)设置浮动窗口对应的tab选项卡的索引值,配合监控回调函数
window.onUexWindowClose = function(obj){
console.log(obj.tabIndex);
tabview.moveTo(obj.tabIndex);
}//实现close返回当前主窗口时打开对应的浮动窗口和tab选项卡10)、修改页面高度多出内容会覆盖:因为我们用的是IScroll加载页面,如果内容修改需要重新刷新页面保证页面滚动,请调用refreshBounce()来保证页面效果。11)、页面展示内容覆盖:可以考虑内容是否是异步加载的,因为我们是直接取现有的高度如果你异步加载某些内容的话重新修改高度可能会把原来的已经算好的popover覆盖掉。12)、页面不能滑动:如果你在某一个元素上面绑定了事件,同时阻止了事件的传播这一块可能造成IScroll接受不到事件导致页面不能滑动。13)、功能不能用:请检查是否用到了没有封装的接口,目前我们只对uexWindow做了封装,如果是微信内运行的话还有一些微信的插件可以支持,另外如果取数据的话可以把appcan.request.ajax 改为Zepto.ajax,同时保证参数问题,因为Zepto传文件会有问题,建议复用函数,这些多多少少还是有一点不同的,getJSON,get,post这些方法完全可以使用。14)、元素点击等默认事件不响应:如果打开的页面是popover,内部在元素上添加了onclick事件,微信/web点击的时候无法响应,请给元素添加以btn开头的className,例如btn-click.因为iframe内容外层添加了IScroll,元素默认的事件被阻止。15)、close返回问题:因为web版新open方法打开一个页面是通过url跳转,所以如果调用open方法打开了a.html,当a.html加载的时候调用open方法则从a.html跳转到b.html,所以当从b.html调用close方法返回到a.html的时候又会open跳转到b.html从而陷入死循环,因此类似原app版本的抽屉效果暂时未予支持
以上信息是否解决您的问题?

我要回帖

更多关于 支付宝集成接口 的文章

 

随机推荐