jspay.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/6/1
  6. * Time: 下午9:54
  7. */
  8. namespace Pay;
  9. define(JSPAY_PATHEX, BASE_DATA_PATH . '/api/pub_wxpay');
  10. require_once(JSPAY_PATHEX . '/lib/WxPay.Api.php');
  11. require_once(JSPAY_PATHEX . '/lib/WxPay.Config.php');
  12. require_once(JSPAY_PATHEX . '/lib/WxPay.Data.php');
  13. require_once(JSPAY_PATHEX . '/lib/WxPay.Exception.php');
  14. require_once(JSPAY_PATHEX . '/lib/WxPay.Notify.php');
  15. require_once(BASE_ROOT_PATH . '/helper/util_helper.php');
  16. use \WxPayUnifiedOrder;
  17. use \WxPayApi;
  18. use \WxPayJsApiPay;
  19. use \WxPayException;
  20. use util;
  21. class jspay implements IPay
  22. {
  23. const wx_notifyurl = BASE_SITE_URL . '/mobile/pub_wxnotify.php';
  24. const wx_orderquery = 'https://api.mch.weixin.qq.com/pay/orderquery';
  25. private $mOpenId;
  26. public function __construct($openid)
  27. {
  28. $this->mOpenId = $openid;
  29. }
  30. public function gen_pay($pay_sn,$fee,$order_sn,$subject)
  31. {
  32. $input = new WxPayUnifiedOrder();
  33. $input->SetBody($subject); //商品或支付单简要描述
  34. $input->SetAttach($pay_sn); //附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
  35. $out_trade_no = $pay_sn . sprintf("%03d",mt_rand(0,999)); //给微信用的每次重新生成的商户订单SN, 避免二次支付, 数额修改导致支付失败
  36. $input->SetOut_trade_no($out_trade_no);//商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
  37. $input->SetTotal_fee("{$fee}");//订单总金额,单位为分,详见支付金额
  38. $input->SetTime_start(date("YmdHis")); //订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
  39. $input->SetTime_expire(date("YmdHis", time() + 600));//订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
  40. $input->SetNotify_url(self::wx_notifyurl);
  41. $input->SetTrade_type("JSAPI");
  42. $input->SetOpenid($this->mOpenId);
  43. $input->SetSpbill_create_ip(util::real_ip());
  44. $order = WxPayApi::unifiedOrder($input);
  45. if(!array_key_exists("appid", $order)
  46. || !array_key_exists("prepay_id", $order)
  47. || $order['prepay_id'] == "")
  48. {
  49. throw new WxPayException("参数错误");
  50. }
  51. $jsapi = new WxPayJsApiPay();
  52. $jsapi->SetAppid($order["appid"]);
  53. $timeStamp = time();
  54. $jsapi->SetTimeStamp("$timeStamp");
  55. $jsapi->SetNonceStr(WxPayApi::getNonceStr());
  56. $jsapi->SetPackage("prepay_id=" . $order['prepay_id']);
  57. $jsapi->SetSignType("MD5");
  58. $jsapi->SetPaySign($jsapi->MakeSign());
  59. return array("data" => $jsapi->GetValues());
  60. }
  61. public function on_notify($post)
  62. {
  63. }
  64. }