Zhapay.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace app\common\extend\pay;
  3. class Zhapay {
  4. public $name = '幻兮支付';
  5. public $ver = '1.0';
  6. public function submit($user,$order,$param)
  7. {
  8. $pay_type = 1;
  9. if(!empty($param['paytype'])){
  10. $pay_type = intval($param['paytype']);
  11. }
  12. //组装参数
  13. $data = array(
  14. "mch_uid" => trim( $GLOBALS['config']['pay']['zhapay']['appid'] ),//你的码支付ID
  15. "pay_type_id" => $pay_type,//1微信 2支付宝
  16. "total_fee" => $order['order_price'],//金额100元
  17. "out_trade_no" => $order['order_code'], //唯一标识 可以是用户ID,用户名,session_id(),订单ID,ip 付款后返回
  18. "notify_url" => $GLOBALS['http_type'] . $_SERVER['HTTP_HOST'] . '/index.php/payment/notify/pay_type/zhapay',//通知地址
  19. "return_url" => $GLOBALS['http_type'] . $_SERVER['HTTP_HOST'] . '/index.php/payment/notify/pay_type/zhapay',//跳转地址
  20. "debug" => 1,//软件未启动的话
  21. "mepay_type" => trim( $GLOBALS['config']['pay']['zhapay']['act'] ),//1代收需要申请 2即时到账
  22. "return_type" =>1,
  23. "param" => "",//自定义参数
  24. );
  25. ksort($data); //重新排序$data数组
  26. reset($data); //内部指针指向数组中的第一个元素
  27. $sign = ''; //初始化需要签名的字符为空
  28. $urls = ''; //初始化URL参数为空
  29. foreach ($data as $key => $val) { //遍历需要传递的参数
  30. if ($val == ''||$key == 'sign') continue; //跳过这些不参数签名
  31. if ($sign != '') { //后面追加&拼接URL
  32. $sign .= "&";
  33. $urls .= "&";
  34. }
  35. $sign .= "$key=$val"; //拼接为url参数形式
  36. $urls .= "$key=" . urlencode($val); //拼接为url参数形式并URL编码参数值
  37. }
  38. $query = $urls . '&sign='.md5($sign.trim( $GLOBALS['config']['pay']['zhapay']['appkey'] )); //创建订单所需的参数
  39. $url = "https://www.zhapay.com/mapay.html?{$query}"; //支付页面
  40. mac_redirect($url);
  41. }
  42. public function notify()
  43. {
  44. $param = $_POST;
  45. // $post['pay_id'] 这是付款人的唯一身份标识或订单ID
  46. // $post['pay_no'] 这是流水号 没有则表示没有付款成功 流水号不同则为不同订单
  47. // $post['money'] 这是付款金额
  48. // $post['param'] 这是自定义的参数
  49. //unset($param['/payment/notify/pay_type/zhapay']);
  50. //unset($param['pay_type']);
  51. ksort($param); //排序post参数
  52. reset($param); //内部指针指向数组中的第一个元素
  53. $sign = '';
  54. foreach ($param as $key => $val) {
  55. if ($val == '' || $key == 'sign') continue; //跳过空值
  56. if ($sign) $sign .= '&';
  57. $sign .= "$key=$val"; //拼接为url参数形式
  58. }
  59. $GLOBALS['config']['pay'] = config('maccms.pay');
  60. if (!$param['transaction_id'] || md5($sign. $GLOBALS['config']['pay']['zhapay']['appkey']) != $param['sign']) {
  61. echo 'fail';
  62. }
  63. else{
  64. $res = model('Order')->notify($param['out_trade_no'],'zhapay');
  65. if($res['code'] >1){
  66. echo 'fail2';
  67. }
  68. else {
  69. echo 'success';
  70. }
  71. }
  72. }
  73. }