require 'vendor/autoload.php';
use Medoo\Medoo;
//创建Server对象,监听 0.0.0.0:2345端口
$serv = new Swoole\Server("0.0.0.0", 2345);
//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {
echo "Client: Connect.\n";
});
$database = new Medoo([
'database_type' => 'mysql',
'database_name' => 'huijie2',
'server' => 'rm-j6cq11ejyk37q99xk90130.mysql.rds.aliyuncs.com',
'username' => 'huijie2',
'password' => 'hj2411327+',
'prefix' => 'bz_',
'charset' => 'utf8'
]);
//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $from_id, $data) use ($database){
$sys_order_id=json_decode($data);
$order_info = $database->get("trade", '*',[
"sys_order_id" => $sys_order_id
]);
$user_info = $database->get("user", ['secret_key'],["user_id[=]" => $order_info["user_id"]]);
if(empty($order_info)){
$serv->send($fd,"订单不存在);
}
if(empty($user_info)){
$serv->send($fd,"商户不存在");
}
//组装给客户返回的数据
$post_data['mer_id'] = $order_info['user_id']; //商户ID
$post_data['order_id'] = $order_info['user_order_id']; //订单号
$post_data['amount'] = $order_info['amount']; //订单金额。单位:元
$post_data['pay_state']=$order_info['pay_state'];//支付状态
$post_data['sign'] = md5('amount='.$order_info['amount'].'&mer_id='.$order_info['user_id'].'&order_id='.$order_info['user_order_id'].'&pay_state='.$order_info['pay_state'].'&key='.$user_info['secret_key']);//签名
$post_data['original_amount'] = $order_info['price'];//原始价格
$post_data['attach'] = $order_info['attach']; //备注信息
$post_data['code']='200';
//使用GuzzleHttp发送回调信息
$client = new \GuzzleHttp\Client();
//通过post来进行发送
//此处为发送回调代码
});
//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$serv->start();
客户端:
// 建立socket连接到内部推送端口
$client = stream_socket_client('tcp://地址:端口', $errno, $errmsg, 1);
// 推送的数据,包含uid字段,表示是给这个uid推送
$sys_order_id=json_encode($sys_order_id);
// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
fwrite($client, $sys_order_id."\n");
// 读取推送结果
echo fread($client, 8192);
fclose($client);
或者
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, -1))
{
exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("hello world\n");
echo $client->recv();
$client->close();