电商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应用开发之插件实践篇-支付插件的更多相关文章

  1. 微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件)

    前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了 ...

  2. 如何开发ecshop支付插件

    如何开发ecshop支付插件 ecshop模板网 / 2014-06-03 目标一:搞懂ecshop的支付流程 选完商品,进入购物车页面,点击“结算中心”,页面跳转到flow.php?step=che ...

  3. WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付

    痛点: 我们用WordPress建设网站和开发移动应用,有时候我们其实不需要太多的流程,只是需要一个收款通道,但是可能对支持的渠道更加关注,特别是手机应用.所以WordPress按钮秒支付插件诞生了, ...

  4. nopCommerce 3.9 大波浪系列 之 开发支持多店的插件

    一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. (点击接口介 ...

  5. Cordova - 彻底搞定安卓中的微信支付插件!

    Cordova:8.0.0 Android studio:3.2.1 cordova-plugin-adam-wechat : 3.0.6 你看到这个标题肯定会惊讶,一个Cordova的微信支付插件, ...

  6. Discuz!快速对接个人支付插件

    ## Discuz!快速对接个人支付插件 由于近期准备使用老牌论坛程序Discuz建立一个交流社区分享一些资源,但是测试了各种支付方式都不满意,偶然发现一个简直不要太完美的解决方案.今天抽时间搭建好并 ...

  7. NopCommerce Alipay 支付插件

    NopCommerce Alipay 支付插件 1.查找及下载NopCommerce Alipay插件 http://www.nopcommerce.com/p/963/alipay-payment- ...

  8. 好用的Magento一步支付插件One Step Checkout免费版

    Magento免费版一步支付插件地址:http://www.magentocommerce.com/magento-connect/one-page-checkout.html‎ 直接引用KEY:ht ...

  9. WooCommerce微信支付插件免费版下载

    WooCommerce微信支付插件免费版下载 2016-05-11 点击:605 免费版来了 免费版终于来了,直接下载用吧,当然免费少一些功能,只有PC扫码支付,没有微信原生支付,没有汇率,没有退款, ...

随机推荐

  1. 如何查看IIS并发连接数

    如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带的系统监视器来查看. 一.运行-->输入"perfmon.msc". 二.在"系统监 ...

  2. 实验室中搭建Spark集群和PyCUDA开发环境

    1.安装CUDA 1.1安装前工作 1.1.1选取实验器材 实验中的每台计算机均装有双系统.选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心. ...

  3. SQL 表值函数

    表值函数返回的是一张表. 情况:把传入的字符串按指定分隔符转换成数组 理解:把字符串打散,逐个插入表,这个表就是需要的数据 Create Function [dbo].[Split] ( ), ) ) ...

  4. phpDoc使用说明

    技术文档可以使人们更好得使用他人的代码库,然而,作为开发人员,编写文档确是一件让人头疼的事情.PHPDoc是PHP文档注释的一个标准,它可以实现为代码生成API文档. PHPDoc注释规范: 块注释的 ...

  5. NOIP2003 加分二叉树

    http://www.luogu.org/problem/show?pid=1040 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号. ...

  6. Java基础学习(学习IT企业必读的324个JAVA面试题.pdf 整理)

    一.Java程序基础 javac 文件名.java    编译程序 java 类名               运行java程序 代码规范中,一下几点要注意: 包名:包名是全小写的名词,中间可以由点分 ...

  7. php 调用.net的webservice 需要注意的

    首先 SoapClient类这个类用来使用Web services.SoapClient类可以作为给定Web services的客户端.它有两种操作形式:* WSDL 模式* Non-WSDL 模式在 ...

  8. 【Nginx 3】FTP远程文件下载

    导读:在做项目的过程中,当用户发起申诉时,要上传一个申诉材料.然后后台运营人员在处理申诉时,可能会需要下载申诉材料,进行参考.本篇博客呢,就介绍一下文件的下载! 一.代码实现 <span sty ...

  9. html5 搖一搖

    <script> // 首先在页面上要监听运动传感事件 function init(){ if (window.DeviceMotionEvent) { // 移动浏览器支持运动传感事件 ...

  10. Linux系统在嵌入式硬件上的移植

    =========================        基本常识       ========================= 一. Linux系统的基本构成: 1. loader 2.  ...