app_pay.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 15/12/9
  6. * Time: 上午12:25
  7. */
  8. define(WXPAY_PATH,BASE_DATA_PATH.'/api/wxpay');
  9. require_once (WXPAY_PATH . '/lib/WxPay.Api.php');
  10. require_once (WXPAY_PATH . '/lib/WxPay.Config.php');
  11. require_once (WXPAY_PATH . '/lib/WxPay.Data.php');
  12. require_once (WXPAY_PATH . '/lib/WxPay.Exception.php');
  13. require_once (WXPAY_PATH . '/lib/WxPay.Notify.php');
  14. class app_payControl extends mobileHomeControl
  15. {
  16. static $pay_types = array('wxpay','alipay');
  17. const wx_notifyurl = 'http://t.lrlz.com/mobile/control/wxnotify.php';
  18. public function uniorderOp()
  19. {
  20. $pay_sn = $_GET['paysn'];
  21. $payment = $_GET['payment'];
  22. if(in_array($payment,self::pay_types) == false) {
  23. return joutput_error(errcode::ErrPayment,'err paytype : wxpay,alipay');
  24. }
  25. $logic_payment = Logic('payment');
  26. //重新计算所需支付金额
  27. $result = $logic_payment->getRealOrderInfo($pay_sn, $this->member_info['member_id']);
  28. if(!$result['state']) {
  29. return joutput_error(errcode::ErrPayment,$result['msg']);
  30. }
  31. $ret = $this->api_pay($result['data'], $payment);
  32. joutput_data($ret);
  33. }
  34. private function api_pay($pay_info,$payment)
  35. {
  36. $subject = $pay_info['subject'];
  37. $pay_sn = $pay_info['pay_sn'];
  38. $fee = $pay_info['pay_amount'];
  39. if($payment == 'wxpay') {
  40. return $this->uniorder($subject,$pay_sn,1);
  41. } else {
  42. }
  43. }
  44. /**
  45. * 格式化参数格式化成url参数
  46. */
  47. private function to_url_params($values)
  48. {
  49. $buff = "";
  50. foreach ($values as $k => $v)
  51. {
  52. if($k != "sign" && $v != "" && !is_array($v)){
  53. $buff .= $k . "=" . $v . "&";
  54. }
  55. }
  56. $buff = trim($buff, "&");
  57. return $buff;
  58. }
  59. private function make_sign($values)
  60. {
  61. //签名步骤一:按字典序排序参数
  62. ksort($values);
  63. $string = $this->to_url_params($values);
  64. //签名步骤二:在string后加入KEY
  65. $string = $string . "&key=".WxPayConfig::KEY;
  66. //签名步骤三:MD5加密
  67. $string = md5($string);
  68. //签名步骤四:所有字符转为大写
  69. $result = strtoupper($string);
  70. return $result;
  71. }
  72. public function wxnotifyOp()
  73. {
  74. }
  75. /**
  76. * @return array
  77. * @throws WxPayException
  78. */
  79. private function uniorder($body,$paysn,$fee)
  80. {
  81. $input = new WxPayUnifiedOrder();
  82. $input->SetBody($body); //商品或支付单简要描述
  83. $input->SetAttach($paysn); //附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
  84. $input->SetOut_trade_no(WxPayConfig::MCHID . date("YmdHis"));//商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
  85. $input->SetTotal_fee("$fee");//订单总金额,单位为分,详见支付金额
  86. $input->SetTime_start(date("YmdHis")); //订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
  87. $input->SetTime_expire(date("YmdHis", time() + 600));//订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
  88. $input->SetNotify_url(self::wx_notifyurl);
  89. $input->SetTrade_type("APP");//JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里,MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口
  90. $order = WxPayApi::unifiedOrder($input);
  91. $ret = array();
  92. $ret['appid'] = $order["appid"];
  93. $ret['noncestr'] = WxPayApi::getNonceStr();
  94. $ret['package'] = 'Sign=WXPay';
  95. $ret['partnerid'] = WxPayConfig::MCHID;
  96. $ret['prepayid'] = $order['prepay_id'];
  97. $timeStamp = time();
  98. $ret['timestamp'] = "$timeStamp";
  99. $sign = $this->make_sign($ret);
  100. $ret['sign'] = $sign;
  101. return $ret;
  102. }
  103. }