html中的js监听付款按钮--触发ajax调用php后台--得到的json数据---交给安卓原生处理
//01
var pay_status = new Object();
$(".sure_pay").on("touchstart",function(){ var order_id = $('#order_id').val(); payLinkShape("showShape");
var payType=1;//默认是微信支付,用来储存支付象征标识
/*点击获取支付方式start*/
$('.payBox input').on('ifChecked', function(event){
if(event.type == "ifChecked"){
clsName=$(this).attr("class");
}
})
/*点击获取支付方式end*/
switch (clsName)
{
case "weix":
payType=1;
break;
case "zfb":
payType=2;
break;
case "company":
payType=0;
break;
} //console.log('clsName ==');
//console.log(clsName);
//console.log('order_id ='+order_id);
$.ajax({
url:"/order/pay_order_wx?order_id="+order_id,
type:'GET',
data:"{}",
dataType:"json",
success: function(jsonPayinfo){
console.log('success ==');
console.log(jsonPayinfo);
if(jsonPayinfo.return_code == 'SUCCESS' && jsonPayinfo.result_code == 'SUCCESS')
{
jsonPayinfo=JSON.stringify(jsonPayinfo);
//console.log(jsonPayinfo);
payLinkShape();
var u = navigator.userAgent;
//TripMobile.tripPay(payType,jsonPayinfo);
if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {
//安卓手机
TripMobile.tripPay(payType,jsonPayinfo);
//console.log(payType);
//console.log(jsonPayinfo);
} else if (u.indexOf('iPhone') > -1) {
//苹果手机
//jakilllog(payType,jsonPayinfo);
}
}else{
console.log('进来这里了');
return false;
}
}, error: function (XMLHttpRequest, textStatus, errorThrown) {
//console.log('error +++');
//console.log(XMLHttpRequest);
//console.log(textStatus);
//console.log(errorThrown); }
}); })
////////////02调用微信支付
public function pay_order_wx($order_id)
{ $orderModel = M("order");
$get_data = I('get.'); $where['order_id'] = $get_data['order_id'];
$orderinfo = $orderModel->where($where)->find(); require_once( APP_PATH."../thinkphp/ThinkPHP/Library/Vendor/WxPay/lib/WxPay.Api.php");
require_once( APP_PATH."../thinkphp/ThinkPHP/Library/Vendor/WxPay/lib/WxPay.Config.php");
require_once( APP_PATH."../thinkphp/ThinkPHP/Library/Vendor/WxPay/lib/WxPay.Data.php");
require_once( APP_PATH."../thinkphp/ThinkPHP/Library/Vendor/WxPay/lib/WxPay.Exception.php");
require_once( APP_PATH."../thinkphp/ThinkPHP/Library/Vendor/WxPay/JsApiPay.php"); //$tools = new JsApiPay();
//$openId = $tools->GetOpenid();
//②、统一下单 $input = new WxPayUnifiedOrder();
$input->SetBody( '差旅费用');
$input->SetAttach("test");
$input->SetOut_trade_no( $orderinfo['order_num'].date("YmdHis") );//8位订单号,加上14位时间 if( TRIP_MODE == 'DEV' || TRIP_MODE == 'TEST' ){
$input->SetTotal_fee("1");//开发环境,和测试环境.默认付款0.01元
}else{
$input->SetTotal_fee( $orderinfo['order_true_total_money'] * 100 ); //微信支付以分为单位。
}
//我们数据库100.16元.会被转成 100.16分 $input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test"); $input->SetNotify_url( "http://{$_SERVER['HTTP_HOST']}/api/wxpay/on_wxpay_complete.html");
$input->SetTrade_type("APP");
$order = WxPayApi::unifiedOrder($input); $timeStamp = time();
$returnorder['appid'] = "wx9xxxxxx4f7dde7";
$returnorder['partnerid'] = "13999999991";
$returnorder['noncestr'] = md5($order['nonce_str']);
$returnorder['timestamp'] = $timeStamp;
$returnorder['prepayid'] = $order['prepay_id'];
$returnorder['package'] = "Sign=WXPay"; //签名步骤一:
ksort($returnorder);
$sign = "";
foreach ($returnorder as $k => $v)
{
if($k != "sign"){
$sign .= $k . "=" . $v . "&";
}
}
$sign = trim($sign, "&"); //签名步骤二:在string后加入KEY
$sign = $sign . "&key=".WxPayConfig::KEY;
//$sign = $sign . "&key=".'xxxxxxxxxxx'; //签名步骤三:MD5加密
$sign = md5($sign);
//签名步骤四:所有字符转为大写
$sign = strtoupper($sign);
$returnorder['sign'] = $sign; $returnorder['return_code'] = $order['return_code'];
$returnorder['return_msg'] = 'OK';
$returnorder['result_code'] = $order['result_code'];
D('Tlog')->log( "微信支付订单 orderid=".$order_id. ' result'.json_encode_ex($order) );
$this->ajaxReturn($returnorder,'json'); } ////////03接收微信回调
public function on_wxpay_complete( )
{
// $info = $_REQUEST; if( APP_DEBUG ) \Think\Log::write('WxNotify: RAW_POST: '.$GLOBALS["HTTP_RAW_POST_DATA"], 'DEBUG' ); $rowpost = $GLOBALS["HTTP_RAW_POST_DATA"]; vendor('XmlParser.XML','','.class.php'); $qr = XML_unserialize( $rowpost ); mylog1('$qr =='.json_encode_ex($qr)); //记录日志,将所有的第三方通知消息都记录日志
$curtime = date('Ymd H:i:s');
$ordernumber = $qr['xml']['out_trade_no'];
$ordernumber = substr( $qr['xml']['out_trade_no'], 0, 12 );
file_put_contents( C('LOGPATH_ORDER_NITIFY')."/Wxpay_{$ordernumber}.txt", "\n\n$curtime \n".json_encode_ex($qr),FILE_APPEND ); /*
array(1) {
["xml"] => array(17) {
["appid"] => string(18) "wx9999999dde7"
["attach"] => string(4) "test"
["bank_type"] => string(3) "CFT"
["cash_fee"] => string(1) "1"
["fee_type"] => string(3) "CNY"
["is_subscribe"] => string(1) "N"
["mch_id"] => string(10) "1346077501"
["nonce_str"] => string(32) "ermeg0d01gv7k4aqppwrmtqfn1yohgy0"
["openid"] => string(28) "ok4np999999b7X90JmwDc"
["out_trade_no"] => string(26) "20160524010520160526193042"
["result_code"] => string(7) "SUCCESS"
["return_code"] => string(7) "SUCCESS"
["sign"] => string(32) "0ECB9999999DF9B859C45"
["time_end"] => string(14) "20160526193052"
["total_fee"] => string(1) "1"
["trade_type"] => string(3) "APP"
["transaction_id"] => string(28) "4099999999993752"
}
}
*/ if( 'SUCCESS' == $qr['xml']['result_code'] && 'SUCCESS' == $qr['xml']['return_code'] )
{ //支付成功
html中的js监听付款按钮--触发ajax调用php后台--得到的json数据---交给安卓原生处理的更多相关文章
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- 原 JS监听回车事件
原 JS监听回车事件 发表于2年前(2014-06-04 10:16) 阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 ...
- js监听输入框值的即时变化onpropertychange、oninput
js监听输入框值的即时变化onpropertychange.oninput 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感. // // 要达到的效果 ...
- JS监听组合按键
有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete ...
- js监听input等表单输入框的变化事件oninput
js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变 ...
- jQuery中的事件监听方式及异同点
jQuery中的事件监听方式及异同点 作为全球最知名的js框架之一,jQuery的火热程度堪称无与伦比,简单易学的API再加丰富的插件,几乎是每个前端程序员的必修课.从读<锋利的jQuery&g ...
- 简单剖析Node中的事件监听机制(一)
使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...
- 使用web3.js监听以太坊智能合约event
传送门: 柏链项目学院 使用web3.js监听以太坊智能合约event 当我们在前端页面调用合约时发现有些数据不会立即返回,这时还需要再调用更新数据的函数.那么这样的方法使用起来非常不便,监听ev ...
- 【转】keyCode对照表及JS监听组合按键
原文: http://blog.csdn.net/qq_21386275/article/details/67640576 有一些需求,html 页面上的input 框只允许输入数字, 只允许输入小 ...
随机推荐
- CHD 2015迎新杯题解
A.预防流感的拉面女神 简析:计算 n 的二进制表示里面 1 的个数 #include <cstdio> #include <cstring> #include <alg ...
- Hive插数据报错
报错信息: Failed with exception MetaException(message:javax.jdo.JDODataStoreException: Put request faile ...
- QT学习笔记—1
1.模态和非模态的区别:非模态可以同时操作两个窗口,模态的只能在顶层窗口关闭之后才能使用其他窗口 //同时显示出widget和dialog窗口,非模态 QDialog *dialog = ne ...
- django manage.py 的各种功能
[简介] django-admin.py是Django的一个用于管理任务的命令行工具.本文将描述它的大概用法. 另外,在每一个Django project中都会有一个manage.py.manage. ...
- ora2pg数据迁移
1.安装strawberry-perl-5.242.安装ora2pg-17.4 #perl Makefile.PL #dmake && dmake install3.安装ora2pg相 ...
- Memcache(1)
一.缓存套路 原文地址:http://coolshell.cn/articles/17416.html Scaling Memcached at Facebook 好些人在写更新缓存数据代码时,先删除 ...
- Qt出现常量有换行符的错误的解决方法
可以使用 QString::fromLocal8Bit 来将本地字符编码转换为 Unicode 形式的 QString.
- JavaScript基本类型比较
我们都知道js的基本类型有undefined,null,boolean,number,string; 当我们在进行基本数据类型的运算和比较时数据类型会根据运算符号和左右两边值的不同作如下转换: + ...
- how to check if you have TURNIN successfully?
For example, if I want to check if I have turnin my proj1 of cs130a successfully, I just use this co ...
- Textarea自适应高度 JS实现,兼容IE6\7\8\9\10\11
<!DOCTYPE html> <html> <head> <title>autoresizing textarea</title> < ...