//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数据---交给安卓原生处理的更多相关文章

  1. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  2. 原 JS监听回车事件

    原 JS监听回车事件 发表于2年前(2014-06-04 10:16)   阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦  ...

  3. js监听输入框值的即时变化onpropertychange、oninput

    js监听输入框值的即时变化onpropertychange.oninput 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感. // //   要达到的效果 ...

  4. JS监听组合按键

    有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete ...

  5. js监听input等表单输入框的变化事件oninput

    js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变 ...

  6. jQuery中的事件监听方式及异同点

    jQuery中的事件监听方式及异同点 作为全球最知名的js框架之一,jQuery的火热程度堪称无与伦比,简单易学的API再加丰富的插件,几乎是每个前端程序员的必修课.从读<锋利的jQuery&g ...

  7. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

  8. 使用web3.js监听以太坊智能合约event

    传送门: 柏链项目学院 使用web3.js监听以太坊智能合约event   当我们在前端页面调用合约时发现有些数据不会立即返回,这时还需要再调用更新数据的函数.那么这样的方法使用起来非常不便,监听ev ...

  9. 【转】keyCode对照表及JS监听组合按键

    原文: http://blog.csdn.net/qq_21386275/article/details/67640576 有一些需求,html 页面上的input 框只允许输入数字,  只允许输入小 ...

随机推荐

  1. 第11章 使用PHP从Web访问MySQL数据库

    1.过滤用户可能值其搜索条件的起始或结束位置不小心输入的空白字符: 应用trim(): 2.转义数据(第4章)函数:addslashes(),stripslashes(),get_magic_quot ...

  2. CountDownLatch使用详解

    正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行.在Java并发中,countdownlatch的概念是一 ...

  3. 在sublime_text3中实现项目的跳转

    作为学习前端的小白,选择了sublime_text3作为学习的编译器.学习的过程是艰辛的,但也是快乐的.遇到自己不会的,有时候会折腾好几个小时,在实现预期效果的时候,那种兴奋真的难以言述. 今天,在学 ...

  4. shell获取系统时间

    获取系统时间 date -d"yesterday" +"%F %H:%M:%S" #输出昨天这个时候的时间 date -d"tomorrow" ...

  5. 怎么 得到 DBGrid选中行的数据

    转自:https://zhidao.baidu.com/question/1694035814426308148.html 一般是你鼠标点到哪一行,其DataSet的指针就指到了什么位置你可以直接通过 ...

  6. 建立tcl文件

  7. Process Monitor V2.96 (系统监视工具) 汉化免费绿色版

    软件名称: Process Monitor V2.96 (系统监视工具) 汉化免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP ...

  8. 《JavaScript DOM编程艺术》读书笔记

    这是自己JS入门的一本书,反复看过几遍,作者的文笔风趣,阅读起来不枯燥也显轻松~ 本书从JS简史讲到基础语法到DOM,再以一个图片库案例为主线,讲如何运用JS来实现想要的动效,同时对已写案例进行兼容优 ...

  9. JS replace可以接受回调函数

    这是js最鲜为人知的秘密之一,v 1.3首次引入.大部分情况下repalce的使用情况如下: '10 12 13 40 50'.replace(/\d+/g,'*');//用 * 替换所有的数字 这是 ...

  10. 拦截QWebView弹出窗口

    环境 系统:win7 64位旗舰版 软件:VS2013.QT5.5.1-32位 概述 当网页打开一个新的窗口时,我们有时候需要根据URL地址来判断弹出窗口是否合理,如果合理则弹出新窗口,否则不弹出.本 ...