博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网银在线的异步操作代码示意图
阅读量:4007 次
发布时间:2019-05-24

本文共 2852 字,大约阅读时间需要 9 分钟。

1.关于异步反馈的操作,之所以需要这个,是因为有时候,如果用户使用的时候突然断网了或者什么的,就不会导致数据异常,没有反馈到成功的信息。

所以需要异步这个操作。
如果正常的情况下,是走同步的流程的,然后网银那边会每隔三分钟左右反馈一个异步的请求,只有反馈值为true的话才会修改订单信息,基本的值和同步都是差不多的。

2.对写的的操作进行学习。

①在main.php文件里面,配置一个异步返回的路径
这里写图片描述
②在UnionpayProxy.php文件夹下,在原来的基础上加入异步通知的url,然后初始化给remark2字段。
这里写图片描述
③在UnionPayService页面里面,对remark2字段进行单独的初始化,如果有的话,就是

if($key == 'remark2'){    //在remark2这个字段配置一个异步通知的url注意在value里面要加上中括号    $sHtml.='';}

要加入以上的字段,url那里要加上中括号,一定要按照上述的格式进行赋值

这里写图片描述

④在我对应异步通知的目录下加入一个对应的方法,具体写法和同步的相同

/**
* 银联异步 返回显示页面
* @desc 异步通知支付【对账单】
* @return boolean
* @author xcz <2015-7-28>
*
*/
function actionUnionpayNoticeReturn(){
$unionpay = Yii::app()->unionpay;

//FunctionHelper::sendMail("1598135958@qq.com","粽子测试","粽子测试",print_r($_POST,true));//exit;$key = 'joyowoyaobaohuhao990';//登陆后在上面的导航栏里可能找到“资料管理”,在资料管理的二级导航栏里有“MD5密钥设置”$return_array = $_POST;$v_oid = trim($_POST['v_oid']);// 商户发送的v_oid定单编号$v_pmode = trim($_POST['v_pmode']);// 支付方式(字符串)$v_pstatus = trim($_POST['v_pstatus']);//  支付状态 :20(支付成功);30(支付失败)$v_pstring = trim($_POST['v_pstring']);// 支付结果信息 : 支付完成(当v_pstatus=20时);失败原因(当v_pstatus=30时,字符串);$v_amount = trim($_POST['v_amount']);// 订单实际支付金额$remark1 = trim($_POST['remark1']);//备注字段1$remark2 = trim($_POST['remark2']);//备注字段2//拼凑后的MD5校验值$v_md5str = trim($_POST['v_md5str']);$v_moneytype = trim($_POST['v_moneytype']);//重新计算md5的值$md5string = strtoupper(md5($v_oid . $v_pstatus . $v_amount . $v_moneytype . $key));//判断返回信息,如果支付成功,并且支付结果可信,则做进一步的处理if ($v_md5str == $md5string) {    //支付状态 :20(支付成功);    //30(支付失败)    //支付成功,可进行逻辑处理!    //商户系统的逻辑处理(例如判断金额,判断支付状态,更新订单状态等等)......;    if ($v_pstatus == 20) {        //  支付状态 :20(支付成功);30(支付失败)        //支付成功,可进行逻辑处理!        //商户系统的逻辑处理(例如判断金额,判断支付状态,更新订单状态等等)......;        $order = array();        $order = OrderModel::model()->find('order_code=:order_code', array('order_code' => $v_oid));        $transaction = Yii::app ()->db->beginTransaction ();        try {            OrderModel::model()->updateOrderStatus($v_oid, $v_amount, OrderModel::SERVICECOMPLET);            $order_social_detail_model = OrderSocialDetailModel::model()->findAll('order_id='.$v_oid);            if(!empty($order_social_detail_model)){                foreach ($order_social_detail_model as $value) {                    $value->pay_status = 1;                    $value->paid_status = 1;                    $value->paid_time = date('Y-m-d H:i:s',time());                    $value->service_status = 3;                    $value->pay_time =  date('Y-m-d H:i:s',time());                    $value->update();                }            }            $transaction->commit ();        }catch(Exception $e){            // 如果操作失败, 数据回滚            $transaction->rollback ();        }        Yii::app()->SSOClient->refreshLoginInfo();        Yii::app()->SSOClient->getLoginInfo();        return true;    }else{        return false;    }    exit ();}

}

⑤在对应的地方加入

这里写图片描述

你可能感兴趣的文章
flex中设置Label标签文字的自动换行
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-11. 数据类型之间的转换
查看>>
01Java基础语法-13. if分支语句的灵活使用
查看>>
01Java基础语法-15.for循环结构
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-17. do..while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>
[互联网学习]如何提高网站的GooglePR值
查看>>
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>