AutoReceiveController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * @desc 自动对账
  4. * @author renjie
  5. * @date 20130314
  6. */
  7. class AutoReceiveController extends DooController {
  8. private $cashlimit = 100; // 充值金额奖励底限
  9. private $perlimit = 0.05; // 奖励百分比
  10. private $salelimit = 0.2; // 销售人员提成
  11. function autoreceive() { // 自动对账
  12. //**************************************** //MD5密钥要跟订单提交页相同,如Send.asp里的 key = "test" ,修改""号内 test 为您的密钥
  13. //如果您还没有设置MD5密钥请登陆我们为您提供商户后台,地址:https://merchant3.chinabank.com.cn/
  14. $key='smartcost@)!@onlinepaychinabank'; //登陆后在上面的导航栏里可能找到“B2C”,在二级导航栏里有“MD5密钥设置”
  15. //建议您设置一个16位以上的密钥或更高,密钥最多64位,但设置16位已经足够了
  16. //****************************************
  17. $v_oid =trim($_POST['v_oid']);
  18. $v_pmode =trim($_POST['v_pmode']);
  19. $v_pstatus =trim($_POST['v_pstatus']);
  20. $v_pstring =trim($_POST['v_pstring']);
  21. $v_amount =trim($_POST['v_amount']);
  22. $v_moneytype =trim($_POST['v_moneytype']);
  23. $remark1 =trim($_POST['remark1']);
  24. $remark2 =trim($_POST['remark2']);
  25. $v_md5str =trim($_POST['v_md5str']);
  26. /**
  27. * 重新计算md5的值
  28. */
  29. $md5string=strtoupper(md5($v_oid.$v_pstatus.$v_amount.$v_moneytype.$key)); //拼凑加密串
  30. if ($v_md5str==$md5string) {
  31. if ($v_pstatus == '20') {
  32. $pay = Doo::loadModel('pay', TRUE);
  33. $Arrayorder = $pay->getRowsBySN($v_oid);
  34. if(empty($Arrayorder)){ // 无效订单
  35. echo 'error';
  36. die();
  37. }
  38. if ($Arrayorder['money'] == $v_amount) { // 充值金额是否与订单相同
  39. if ($Arrayorder['status'] == 'succ') { // 已手动触发订单完成状态
  40. echo 'ok';
  41. die();
  42. }
  43. if ($Arrayorder['status'] == 'unpay') { // 未完成订单状态
  44. $newpay = Doo::loadModel('pay', TRUE);
  45. $newpay->id = $Arrayorder['id'];
  46. $newpay->paytime = time();
  47. $newpay->status = 'succ';
  48. $succvalue = $newpay->update();
  49. if ($succvalue) {
  50. if(!empty($remark2)&&($v_amount>=$this->cashlimit)){
  51. $salerGet = floor($v_amount*$this->salelimit); // 计算销售人员获得的提成
  52. $v_amount += floor($v_amount*$this->perlimit); // 计算输入优惠码的最终充值金额
  53. Doo::loadModel('m/sale');
  54. $saleObj = new Sale();
  55. $saleObj->total = new DooDbExpression('total+' . $salerGet);
  56. $saleObj->update(array('where'=>'promocode=?','param'=>array($remark2)));
  57. }
  58. Doo::loadModel('users');
  59. $users = new Users();
  60. $moneyValue = $users->updateBank($Arrayorder['userid'], $v_amount);
  61. if ($moneyValue) {
  62. echo "ok";
  63. die();
  64. }
  65. }
  66. }
  67. }else{ // 订单金额与实际充值不等
  68. echo 'error';
  69. die();
  70. }
  71. }
  72. if ($v_pstatus == '30') { // 网银在线返回错误码
  73. echo 'error';
  74. die();
  75. }
  76. }else{ // 哈希串不匹配
  77. echo 'error';
  78. }
  79. }
  80. }
  81. ?>