AppCan应用开发之插件实践篇-支付插件
电商O2O无疑是目前最受用户欢迎的APP类型,而在这类APP中必不可少的就是在线支付功能了。在AppCan平台开发这类应用时,官方封装了微信支付、支付宝、银联等多种支付SDK,更接入了多家聚合支付平台,以满足开发者的各种需求。本文将通过实际案例的讲解,为大家介绍如何在项目中实现支付宝和微信支付功能。
页面效果图

页面UI
首先编写UI界面布局。新建一个AppCan页面,命名为waitpay.html,同时IDE会自动根据waitpay.html页面生成一个浮动窗口waitpay_content.html页面。
在waitpay.html主窗口和waitpay_content.html浮动窗口分别编写UI布局代码,这里不做详解。


支付功能
1.主窗口
(1)在waitpay.html页面js脚本区内编写javaScript代码,用于实现获取微信支付结果的回调函数。
uexWeiXin.cbStartPay = function(data) {
if(JSON.parse(data).errCode==0){
uexWindow.evaluatePopoverScript("myorder", "content", "show()");
uexWindow.evaluatePopoverScript("paylist", "content", "show()");
appcan.window.close(-1);
}else if(JSON.parse(data).errCode==-2){
uexWindow.toast("0", "5","取消支付", "2000");
}else{
uexWindow.toast("0", "5","支付失败", "2000");
}
效果如下:

(2)然后接着在js脚本区域编写javaScript代码,用于实现当点击页面返回按钮时返回上一级页面并清除当前窗口的订单信息。代码如下:
appcan.button(".nav-btn", "btn-act", function() {
appcan.locStorage.remove("country");
appcan.locStorage.remove("orderId");
appcan.locStorage.remove('goodsArr');
appcan.locStorage.remove('length');
appcan.window.close(-1);
})
效果如下:

2.浮动窗口
在waitpay_content.html页面js脚本区内编写JavaScript代码,用于实现当前页面的支付宝支付功能和当前页面的微信支付功能,以及当前页面的数据获取功能。
(1) 首先定义从支付宝官网申请得到的签约商户信息,其次是定义当前页面的币种、汇率、积分以及买家账户余额的信息。其中设置签约商户信息代码如下:
var partner = "208845648165561"; //合作者身份IDs
var seller = "48652321@qq.com"; //卖家支付宝账号
var rsaPrivate= "MIICdwIBADANBgkn4E3TszcjB+Kf7CGVQ/nsvyywjA+i+0vmaftUzoOdIcWnI8UEr9I="; //合作者私钥
var rsaPublic = "MIGfMA0GCSqGSIb3DQEBAQUAVsW8Ol75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB"; //支付宝公钥
(2)在页面预加载函数内编写查询当用登录用户积分和余额的代码,支付宝支付状态的监听函数以及微信支付状态和生成预支付订单的回调函数,部分代码如下:
uexAliPay.onStatus = function(status, des) {
if (status == 0) {
uexWindow.evaluatePopoverScript("myorder", "content", "show()");
uexWindow.evaluatePopoverScript("paylist", "content", "show()");
uexWindow.evaluateScript('waitpay', '0', 'appcan.window.close(-1)');
} else if (status == 4) {
uexWindow.toast("0", "5", "取消支付", "2000");
} else {
uexWindow.toast("0", "5", "支付失败", "2000");
}
}
uexWeiXin.cbStartPay = function(data) {
if (JSON.parse(data).errCode == 0) {
uexWindow.evaluatePopoverScript("myorder", "content", "show()");
uexWindow.evaluatePopoverScript("paylist", "content", "show()");
appcan.window.close(-1);
} else if (JSON.parse(data).errCode == -2) {
uexWindow.toast("0", "5", "取消支付", "2000");
} else {
uexWindow.toast("0", "5", "支付失败", "2000");
}
}
//微信授权回调
uexWeiXin.cbRegisterApp = function(opCode, dataType, data) {
if (data == 0) {
uexWeiXin.isSupportPay();
}
};
uexWeiXin.cbIsSupportPay = function(opCode, dataType, data) {
if (data == 0) {
getPrepayId();
}
}
uexWeiXin.cbGetPrepayId = function(data) {
var pay = JSON.parse(data);
var date = new Date();
var timestamp = date.getTime().toString().substring(0, 10);
if (JSON.parse(data).result_code == "SUCCESS") {
var json = {
appid : "wxf14d58cec986585b", //(必选)微信分配的AppID
partnerid : "1234567890", //(必选)微信支付分配的商户号
prepayid : "wx201506031538433160984eee0861221810", //(必选)微信返回的支付交易会话ID
"package" : "Sign=WXPay", //(必选)暂填写固定值Sign=WXPay
noncestr :"weradfdgdvccfexs", //(必选)随机字符串
timestamp : "1412000000", //(必选)时间戳
sign :"8FC5935C38628F44B924C838D760E33E"//(必选)签名}
}
var strrrr="appid=wxf14d58cec986585b&noncestr="+weradfdgdvccfexs+ "&package=Sign=WXPay&partnerid=1234567890&prepayid="+wx201506031538433160984eee0861221810+ "×tamp=" + 1412000000 + "&key=0e857460d1b309130b9b1d2530ac094d";
json.sign = hex_md5(strrrr).toUpperCase();
uexWeiXin.startPay(JSON.stringify(json));
}
}
});
(3)编写微信授权函数和微信生成预支付订单函数,当点击微信支付Logo时打开支付界面。具体代码如下:
function weixinpay() {
uexWeiXin.registerApp('wxd930ea5d5a258f4f');
}
function getPrepayId() {
var money;
var userCouponId;
if ($("#choose1").hasClass("true")) {
} else {
points = 0;
}
if ($("#choose2").hasClass("true")) {
money = showBalance;
} else {
money = 0;
}
if ($('#coupon').html() == '满99元可以使用10元优惠券') {
userCouponId = 'X';
} else {
userCouponId = userCoupon;
}
var date = new Date();
var timestamp = date.getTime().toString().substring(0, 10);
originAmount = money + last + couponPrice;
alert("money:" + money + "last:" + last + "couponPrice:" + couponPrice);
alert(originAmount);
var param1 = {
appid : "wxd930ea5d5a258f4f",
mch_id : "1234567890",
nonce_str : "weradfdgdvccfexs1",
body : "海外购",
detail : "detail",
attach : orderId + "_" + originAmount + "_" + payRate + "_" + priceCode + "_" + money + "_" + points + "_" + userCouponId + "_" + "1",
out_trade_no : timestamp,
fee_type : "CNY",
total_fee : 1, //last*100
spbill_create_ip : "127.0.0.1",
notify_url : api + "/api/trans/wxpay",
trade_type : "APP",
sign : "8FC5935C38628F44B924C838D760E33E"
};
Var stringSign="appid=wxd930ea5d5a258f4f&attach="+param1.attach+"&body="+param1.body+ "&detail="+param1.detail+"&fee_type=CNY&mch_id=1234567890&nonce_str=weradfdgdvccfexs1¬ify_url="+param1.notify_url+"&out_trade_no="+param1.out_trade_no+&spbill_create_ip=127.0.0.1&total_fee=" + param1.total_fee + "&trade_type=APP&key=0e857460d1b309130b9b1d2530ac094d";
var md = hex_md5(stringSign).toUpperCase();
alert(param1.attach);
param1.sign = md;
var data1 = JSON.stringify(param1);
uexWeiXin.getPrepayId(data1);
}
效果如下:


(4)编写支付宝设置商户信息函数以及支付功能函数,当点击支付宝Logo时打开支付界面。具体代码如下:
function setInfo() {
var money = 0;
if ($("#choose2").hasClass("true")) {
money = Number(showBalance);
}
if ($('#coupon').html() == '满99元可以使用10元优惠券') {
var userCouponId = '';
} else {
var userCouponId = userCoupon;
}
originAmount = money + last + couponPrice;
alert("money:" + money + "last:" + last + "couponPrice:" + couponPrice);
alert(originAmount);
notifyUrl = api + "/api/trans/alipay?orderId=" + orderId + "&originAmount=" + originAmount + "&priceCode=" + priceCode + "&rate=" + payRate + "&score=" + points + "&money=" + money + "&userCouponId=" + userCouponId + "&action=1" + "&total_fee=" + last;
alert(notifyUrl);
uexAliPay.setPayInfo(partner, seller, rsaPrivate, rsaPublic, notifyUrl);
}
function Alipay() {
setInfo();
var subject = "海外购" + num;
var body = "订单内容";
var fee = 0.01;
uexAliPay.pay(num, subject, body, fee);
}
效果如下:

按照上述方法,即可在AppCan应用中实现微信和支付宝支付。
AppCan应用开发之插件实践篇-支付插件的更多相关文章
- 微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件)
前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了 ...
- 如何开发ecshop支付插件
如何开发ecshop支付插件 ecshop模板网 / 2014-06-03 目标一:搞懂ecshop的支付流程 选完商品,进入购物车页面,点击“结算中心”,页面跳转到flow.php?step=che ...
- WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付
痛点: 我们用WordPress建设网站和开发移动应用,有时候我们其实不需要太多的流程,只是需要一个收款通道,但是可能对支持的渠道更加关注,特别是手机应用.所以WordPress按钮秒支付插件诞生了, ...
- nopCommerce 3.9 大波浪系列 之 开发支持多店的插件
一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. (点击接口介 ...
- Cordova - 彻底搞定安卓中的微信支付插件!
Cordova:8.0.0 Android studio:3.2.1 cordova-plugin-adam-wechat : 3.0.6 你看到这个标题肯定会惊讶,一个Cordova的微信支付插件, ...
- Discuz!快速对接个人支付插件
## Discuz!快速对接个人支付插件 由于近期准备使用老牌论坛程序Discuz建立一个交流社区分享一些资源,但是测试了各种支付方式都不满意,偶然发现一个简直不要太完美的解决方案.今天抽时间搭建好并 ...
- NopCommerce Alipay 支付插件
NopCommerce Alipay 支付插件 1.查找及下载NopCommerce Alipay插件 http://www.nopcommerce.com/p/963/alipay-payment- ...
- 好用的Magento一步支付插件One Step Checkout免费版
Magento免费版一步支付插件地址:http://www.magentocommerce.com/magento-connect/one-page-checkout.html 直接引用KEY:ht ...
- WooCommerce微信支付插件免费版下载
WooCommerce微信支付插件免费版下载 2016-05-11 点击:605 免费版来了 免费版终于来了,直接下载用吧,当然免费少一些功能,只有PC扫码支付,没有微信原生支付,没有汇率,没有退款, ...
随机推荐
- com学习(一)GUID 和 接口
话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了.那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 E ...
- 用Java开发代理服务器
基础知识 不管以哪种方式应用代理服务器,其监控HTTP传输的过程总是如下: 步骤一:内部的浏览器发送请求给代理服务器.请求的第一行包含了目标URL. 步骤二:代理服务器读取该URL,并把请求转发给合适 ...
- 第4章 sed命令
1 sed命令基本用法 sed(stream editor)是流编辑器,可对文本文件和标准输入进行编辑: sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件,如果需要保存改动内容,可以选择 ...
- epoll在socket通信中的应用
当服务器需要服务多个客户时,需要使用并发通信,实现并发通信有以下几种方法: 1.在服务器中fork子进程来为每个客户服务 具体可参考http://www.cnblogs.com/ggjucheng/ ...
- BZOJ1996 合唱队 区间DP
OJ地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1996 设dp(i,j,k)代表在理想结果中[i,j]段最后添加的是i或j(k=0or1) ...
- 华为OJ平台——整形数组合并
题目描述: 将两个整型数组按照升序合并,并且过滤掉重复数组元素 输入: 输入说明,按下列顺序输入: 1 输入第一个数组的个数 2 输入第一个数组的数值 3 输入第二个数组的个数 4 输入第二个数组的数 ...
- highchart.js的使用
highchart.js是一个很实用的图表插件,涵盖柱状图.曲线图,区域图.3D图.饼图.散列图.混合图等等,功能很强大. 首先去官网下载最新版highchart.js插件,中文网地址:http:// ...
- C++学了这么多年,你仍不知道的事
C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...
- WWF3入门<第一篇>
工作流是什么东西?暂时还不是很弄得清除. 工作流是用来解决什么问题的?暂时只是形成了一个很模糊的概念,还没办法用语言描述出来. 一.入门范例 以VS2008为例,先来创建一个WWF程序. 在工具箱中, ...
- MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...