Pay.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace app\newhome\controller;
  3. use think\Controller;
  4. use think\Db;
  5. use app\user\model\PayPlugin;
  6. use app\user\model\User;
  7. use app\user\model\UserPay;
  8. class Pay extends Controller{
  9. private $payPluginModel, $userModel;
  10. public function _initialize(){
  11. $this->payPluginModel= new PayPlugin();
  12. $this->userModel = new User();
  13. }
  14. public function pay(){
  15. $data = decode($this->request->post());
  16. // $data['i'] = 'com.dashgame.garden.packone';
  17. // $data['t'] = 1;
  18. // $data['u'] = 1704251601802555535;
  19. $iapInfo = Db::name('iap_config')->where(['item_id'=>$data['i']])->find();
  20. if(empty($iapInfo)) return (json(['error'=>1111]));
  21. $plugin = $this->payPluginModel->getPayPluginByType($data['t']);
  22. if(empty($plugin)) return (json(['error'=>1111]));
  23. $biz_content = $this->getAliTradeInfo($iapInfo, $data['u']);
  24. $val = $this->getAliPayInfo($plugin, $biz_content);
  25. return http_build_query($val);
  26. }
  27. public function notify(){
  28. echo 'success';
  29. }
  30. private function getAliTradeInfo($ipa, $user){
  31. $content = [];
  32. $content['subject'] = $ipa['desc'];
  33. $content['out_trade_no'] = $tradeNo = 'D'.getId();
  34. $content['total_amount'] = $ipa['price'];
  35. // $content['total_amount'] = 0.01;
  36. $content['product_code'] = 'QUICK_MSECURITY_PAY';
  37. $content['timeout_express'] = '90m';
  38. $content['body'] = $ipa['desc'];
  39. $userPay = new UserPay();
  40. $userPay->add(['user_id'=>$user, 'cost'=>$ipa['price'], 'pay_id'=>$ipa['id'], 'out_trade_no'=>$tradeNo]);
  41. return json_encode($content);
  42. }
  43. private function getAliPayInfo($plugin, $biz_content){
  44. $params = [];
  45. $params['app_id'] = $plugin['appid'];
  46. $params['method'] = 'alipay.trade.app.pay';
  47. $params['format'] = "JSON";
  48. $params['charset'] = "UTF-8";
  49. $params['version'] = "1.0";
  50. $params['timestamp'] = getCurrentTime();
  51. $params['sign_type'] = "RSA2";
  52. $params['notify_url'] = 'http://'.$_SERVER['SERVER_NAME']._PHP_FILE_.'/'.$this->request->module().'/'.$this->request->controller().'/notify';
  53. $params['biz_content'] = $biz_content;
  54. ksort($params);
  55. $sign = aliSign($plugin['private_key'], getAliSignContent($params));
  56. $params['sign'] = $sign;
  57. foreach ($params as &$value) {
  58. $value = urlencode($value);
  59. }
  60. return $params;
  61. }
  62. }