wxpay_jsapi.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * 微信支付接口类
  4. * JSAPI 适用于微信内置浏览器访问WAP时支付
  5. */
  6. class wxpay_jsapi {
  7. public function __construct($payment_info = array()) {
  8. define('WXN_APPID', $payment_info['payment_config']['wx_appid']);
  9. define('WXN_APPSECRET', $payment_info['payment_config']['wx_appsecret']);
  10. define('WXN_MCHID', $payment_info['payment_config']['wx_mch_id']);
  11. define('WXN_KEY', $payment_info['payment_config']['wx_key']);
  12. }
  13. public function get_payform($order_info) {
  14. //
  15. //引入PC端微信公共类
  16. require_once PLUGINS_PATH . '/payments/wxpay_native/lib/WxPay.Api.php';
  17. require_once PLUGINS_PATH . '/payments/wxpay_native/WxPay.JsApiPay.php';
  18. //获取用户openid
  19. $tools = new JsApiPay();
  20. // var_dump(1);exit();
  21. $openId = $tools->GetOpenid();
  22. //统一下单
  23. $input = new WxPayUnifiedOrder();
  24. $input->SetBody(config('ds_config.site_name') . $order_info['pay_sn'] . '订单');
  25. $input->SetAttach($order_info['order_type']);
  26. $input->SetOut_trade_no($order_info['pay_sn'].'_'.TIMESTAMP);//31个字符,微信限制为32字符以内 TIMESTAMP 用来防止做随机数,用户支付订单后取消,已产生的订单不能重复支付
  27. $input->SetTotal_fee(bcmul($order_info['api_pay_amount'] , 100,0));
  28. $input->SetTime_start(date("YmdHis"));
  29. $input->SetTime_expire(date("YmdHis", TIMESTAMP + 600));
  30. $input->SetGoods_tag("");
  31. $input->SetNotify_url(str_replace('/index.php', '', HOME_SITE_URL) . '/payment/wxpay_jsapi_notify.html');
  32. $input->SetTrade_type("JSAPI");
  33. $input->SetOpenid($openId);
  34. $order = WxPayApi::unifiedOrder($input);
  35. if($order['return_code']=='FAIL'){
  36. halt($order);
  37. }
  38. $jsApiParameters = $tools->GetJsApiParameters($order);
  39. //不同订单支付成功对应的跳转界面
  40. if($order_info['order_type'] == 'real_order'){
  41. $url = config('ds_config.h5_site_url').'/member/order_list';
  42. }elseif ($order_info['order_type'] == 'vr_order') {
  43. $url = config('ds_config.h5_site_url').'/member/vrorder_list';
  44. } elseif ($order_info['order_type'] == 'pd_order') {
  45. $url = config('ds_config.h5_site_url').'/member/recharge_list';
  46. }elseif($order_info['order_type'] == 'ticket_order'){
  47. $url = config('ds_config.h5_site_url').'/member/index';
  48. }elseif($order_info['order_type'] == 'store_order'){
  49. $url = config('ds_config.h5_site_url').'/member/storeorder_list';
  50. }
  51. $str = <<<EOT
  52. <!DOCTYPE html>
  53. <html>
  54. <head>
  55. <meta http-equiv="Content-type" content="text/html;charset=utf-8" />
  56. <title>微信安全支付</title>
  57. </head>
  58. <body>
  59. 正在加载…
  60. <script type="text/javascript">
  61. function jsApiCall()
  62. {
  63. WeixinJSBridge.invoke(
  64. 'getBrandWCPayRequest',
  65. $jsApiParameters,
  66. function(res){
  67. if (res.err_msg == 'get_brand_wcpay_request:ok') {
  68. //alert(lang.WeChat_pays_off);
  69. self.location = "$url";
  70. }else if (res.err_msg == 'get_brand_wcpay_request:cancel') {
  71. //alert(lang.cancel_WeChat_payment);
  72. self.location = "$url";
  73. } else {
  74. //alert(lang.WeChat_payments_fail);
  75. self.location = "$url";
  76. }
  77. //WeixinJSBridge.log(res.err_msg);
  78. //alert(res.err_code+res.err_desc+res.err_msg);
  79. }
  80. );
  81. }
  82. window.onload = function() {
  83. if (typeof WeixinJSBridge == "undefined"){
  84. if( document.addEventListener ){
  85. document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
  86. }else if (document.attachEvent){
  87. document.attachEvent('WeixinJSBridgeReady', jsApiCall);
  88. document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
  89. }
  90. }else{
  91. jsApiCall();
  92. }
  93. }
  94. </script>
  95. </body>
  96. </html>
  97. EOT;
  98. echo $str;
  99. exit;
  100. }
  101. }